09.06.2015 15:43, Sergey Brester:
09.06.2015 14:44, Maxim Dounin:
I don't see how CreateProcess() bInheritHandles affects handles created by worker processes. It is documented to only control whether inheritable handles will be inherited by a new process or not. Either way, worker processes are not expected to start other processes, so you probably shouldn't care at all.
The problem is, some handles are frequently default inheritable in windows. And if any process in combination parent/children was exited (ex. creashed) without closing this handle - it would be not closed, as long as last process of this "group" is still alive (can potentially inherit this leak handle).
Very bad thing is this "bInheritHandles", have very bad experience with it.
Additionally, I have tested in the meantime the solution with createprocess/bInheritHandles=1. Select in each child will fail with WSAEINVAL "select() failed (10022: An invalid argument was supplied)", despite the flag WSA_FLAG_NO_HANDLE_INHERIT in master was not specified by creating of listening socket.
Don't forget LSPs (Layered Service Providers) - although depricated but, when certain LSPs are installed, the inherited handles can't be used in the child.
But I try to dig deeper...