Use InterlockedIncrement instead of a mutex in CreatePipeOverlapped

refs #10075
This commit is contained in:
Gunnar Beutner 2016-08-11 09:43:50 +02:00
parent f0beeba354
commit 132ee6c558
1 changed files with 3 additions and 10 deletions

View File

@ -323,22 +323,15 @@ String Process::PrettyPrintArguments(const Process::Arguments& arguments)
static BOOL CreatePipeOverlapped(HANDLE *outReadPipe, HANDLE *outWritePipe, static BOOL CreatePipeOverlapped(HANDLE *outReadPipe, HANDLE *outWritePipe,
SECURITY_ATTRIBUTES *securityAttributes, DWORD size, DWORD readMode, DWORD writeMode) SECURITY_ATTRIBUTES *securityAttributes, DWORD size, DWORD readMode, DWORD writeMode)
{ {
static int pipeIndex = 0; static LONG pipeIndex = 0;
static boost::mutex mutex;
if (size == 0) if (size == 0)
size = 8192; size = 8192;
int currentIndex; LONG currentIndex = InterlockedIncrement(&pipeIndex);
{
boost::mutex::scoped_lock lock(mutex);
currentIndex = pipeIndex;
pipeIndex++;
}
char pipeName[128]; char pipeName[128];
sprintf(pipeName, "\\\\.\\Pipe\\OverlappedPipe.%d.%d", (int)GetCurrentProcessId(), currentIndex); sprintf(pipeName, "\\\\.\\Pipe\\OverlappedPipe.%d.%d", (int)GetCurrentProcessId(), (int)currentIndex);
*outReadPipe = CreateNamedPipe(pipeName, PIPE_ACCESS_INBOUND | readMode, *outReadPipe = CreateNamedPipe(pipeName, PIPE_ACCESS_INBOUND | readMode,
PIPE_TYPE_BYTE | PIPE_WAIT, 1, size, size, 60 * 1000, securityAttributes); PIPE_TYPE_BYTE | PIPE_WAIT, 1, size, size, 60 * 1000, securityAttributes);