* transport_pipes.cc (pipe_instance_lock_once): Remove.

(pipe_instance_lock): Remove.
	(pipe_instance): Remove.
	(initialise_pipe_instance_lock): Remove.
	(transport_layer_pipes::accept): Drop entire pipe_instance handling.
	(transport_layer_pipes::close): Ditto.
This commit is contained in:
Corinna Vinschen 2012-11-26 12:33:07 +00:00
parent 5ed0628cf0
commit 6f125cff2b
2 changed files with 10 additions and 33 deletions

View File

@ -1,3 +1,12 @@
2012-11-26 Corinna Vinschen <corinna@vinschen.de>
* transport_pipes.cc (pipe_instance_lock_once): Remove.
(pipe_instance_lock): Remove.
(pipe_instance): Remove.
(initialise_pipe_instance_lock): Remove.
(transport_layer_pipes::accept): Drop entire pipe_instance handling.
(transport_layer_pipes::close): Ditto.
2012-11-23 Corinna Vinschen <corinna@vinschen.de>
* cygserver.cc (main): Call listen right after creating the

View File

@ -52,21 +52,6 @@ enum
#ifndef __INSIDE_CYGWIN__
static pthread_once_t pipe_instance_lock_once = PTHREAD_ONCE_INIT;
static CRITICAL_SECTION pipe_instance_lock;
static long pipe_instance = 0;
static void
initialise_pipe_instance_lock ()
{
assert (pipe_instance == 0);
InitializeCriticalSection (&pipe_instance_lock);
}
#endif /* !__INSIDE_CYGWIN__ */
#ifndef __INSIDE_CYGWIN__
transport_layer_pipes::transport_layer_pipes (const HANDLE hPipe)
: _hPipe (hPipe),
_is_accepted_endpoint (true),
@ -143,26 +128,13 @@ transport_layer_pipes::accept (bool *const recoverable)
assert (!_is_accepted_endpoint);
assert (_is_listening_endpoint);
pthread_once (&pipe_instance_lock_once, &initialise_pipe_instance_lock);
EnterCriticalSection (&pipe_instance_lock);
// Read: http://www.securityinternals.com/research/papers/namedpipe.php
// See also the Microsoft security bulletins MS00-053 and MS01-031.
debug ("Try to create named pipe instance %ld: %ls",
pipe_instance + 1, _pipe_name);
debug ("Try to create named pipe instance: %ls", _pipe_name);
const HANDLE accept_pipe =
CreateNamedPipeW (_pipe_name, PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES,
0, 0, 1000, &sec_all_nih);
if (accept_pipe != INVALID_HANDLE_VALUE)
InterlockedIncrement (&pipe_instance);
LeaveCriticalSection (&pipe_instance_lock);
if (accept_pipe == INVALID_HANDLE_VALUE)
{
debug_printf ("error creating pipe (%lu).", GetLastError ());
@ -199,11 +171,7 @@ transport_layer_pipes::close ()
{
(void) FlushFileBuffers (_hPipe); // Blocks until client reads.
(void) DisconnectNamedPipe (_hPipe);
EnterCriticalSection (&pipe_instance_lock);
(void) CloseHandle (_hPipe);
assert (pipe_instance > 0);
InterlockedDecrement (&pipe_instance);
LeaveCriticalSection (&pipe_instance_lock);
}
else
(void) CloseHandle (_hPipe);