* fhandler.h (class fhandler_socket): Add private method

fixup_after_fork (bool, HANDLE).
	* fhandler_socket.cc (fhandler_socket::fixup_after_fork): Move
	functionality to new private method.  Add closing parent socket
	if not called from dup().  Create method new calling private method
	with appropriate parameter.
	(fhandler_socket::fixup_after_exec): Call private method
	fixup_after_fork with appropriate parameter.
	(fhandler_socket::dup): Ditto.
This commit is contained in:
Corinna Vinschen 2002-06-04 16:38:13 +00:00
parent 6bfca3cca5
commit 4e1388472d
3 changed files with 28 additions and 4 deletions

View File

@ -1,4 +1,16 @@
2002-06-03 Corinna Vinschen <corinna@vinschen.de> 2002-06-04 Corinna Vinschen <corinna@vinschen.de>
* fhandler.h (class fhandler_socket): Add private method
fixup_after_fork (bool, HANDLE).
* fhandler_socket.cc (fhandler_socket::fixup_after_fork): Move
functionality to new private method. Add closing parent socket
if not called from dup(). Create method new calling private method
with appropriate parameter.
(fhandler_socket::fixup_after_exec): Call private method
fixup_after_fork with appropriate parameter.
(fhandler_socket::dup): Ditto.
2002-06-04 Corinna Vinschen <corinna@vinschen.de>
* fhandler_dsp.cc (fhandler_dev_dsp::open): Set errno to EACCES if * fhandler_dsp.cc (fhandler_dev_dsp::open): Set errno to EACCES if
requested mode isn't supported. requested mode isn't supported.

View File

@ -367,6 +367,8 @@ class fhandler_socket: public fhandler_base
struct _WSAPROTOCOL_INFOA *prot_info_ptr; struct _WSAPROTOCOL_INFOA *prot_info_ptr;
char *sun_path; char *sun_path;
void fixup_after_fork (bool, HANDLE);
public: public:
fhandler_socket (); fhandler_socket ();
~fhandler_socket (); ~fhandler_socket ();

View File

@ -184,7 +184,7 @@ fhandler_socket::fixup_before_fork_exec (DWORD win_proc_id)
extern "C" void __stdcall load_wsock32 (); extern "C" void __stdcall load_wsock32 ();
void void
fhandler_socket::fixup_after_fork (HANDLE parent) fhandler_socket::fixup_after_fork (bool dup, HANDLE parent)
{ {
SOCKET new_sock; SOCKET new_sock;
@ -208,6 +208,10 @@ fhandler_socket::fixup_after_fork (HANDLE parent)
else else
{ {
debug_printf ("WSASocket went fine new_sock %p, old_sock %p", new_sock, get_io_handle ()); debug_printf ("WSASocket went fine new_sock %p, old_sock %p", new_sock, get_io_handle ());
#if 1
if (!dup && new_sock != (SOCKET) get_socket ())
closesocket (get_socket ());
#endif
set_io_handle ((HANDLE) new_sock); set_io_handle ((HANDLE) new_sock);
} }
@ -215,12 +219,18 @@ fhandler_socket::fixup_after_fork (HANDLE parent)
fork_fixup (parent, secret_event, "secret_event"); fork_fixup (parent, secret_event, "secret_event");
} }
void
fhandler_socket::fixup_after_fork (HANDLE parent)
{
fixup_after_fork (false, parent);
}
void void
fhandler_socket::fixup_after_exec (HANDLE parent) fhandler_socket::fixup_after_exec (HANDLE parent)
{ {
debug_printf ("here"); debug_printf ("here");
if (!get_close_on_exec ()) if (!get_close_on_exec ())
fixup_after_fork (parent); fixup_after_fork (false, parent);
#if 0 #if 0
else if (!winsock2_active) else if (!winsock2_active)
closesocket (get_socket ()); closesocket (get_socket ());
@ -238,7 +248,7 @@ fhandler_socket::dup (fhandler_base *child)
fhs->fixup_before_fork_exec (GetCurrentProcessId ()); fhs->fixup_before_fork_exec (GetCurrentProcessId ());
if (winsock2_active) if (winsock2_active)
{ {
fhs->fixup_after_fork (hMainProc); fhs->fixup_after_fork (true, hMainProc);
return 0; return 0;
} }
return fhandler_base::dup (child); return fhandler_base::dup (child);