Changes to named pipe functions based on code review.
This commit is contained in:
parent
5e09e37d42
commit
d8c1133201
@ -22,7 +22,6 @@
|
||||
#endif
|
||||
|
||||
#include <winpr/handle.h>
|
||||
#include <winpr/collections.h>
|
||||
|
||||
#ifndef _WIN32
|
||||
|
||||
@ -37,8 +36,6 @@
|
||||
|
||||
#include "../handle/handle.h"
|
||||
|
||||
extern wArrayList* WinPR_NamedPipeBaseInstances;
|
||||
|
||||
BOOL CloseHandle(HANDLE hObject)
|
||||
{
|
||||
ULONG Type;
|
||||
@ -172,9 +169,7 @@ BOOL CloseHandle(HANDLE hObject)
|
||||
|
||||
if (--pipe->dwRefCount == 0)
|
||||
{
|
||||
ArrayList_Lock(WinPR_NamedPipeBaseInstances);
|
||||
ArrayList_Remove(WinPR_NamedPipeBaseInstances, pipe);
|
||||
ArrayList_Unlock(WinPR_NamedPipeBaseInstances);
|
||||
ArrayList_Remove(WinPR_GetBaseNamedPipeList(), pipe);
|
||||
|
||||
if (pipe->pBaseNamedPipe)
|
||||
{
|
||||
|
@ -25,7 +25,6 @@
|
||||
#include <winpr/path.h>
|
||||
#include <winpr/synch.h>
|
||||
#include <winpr/handle.h>
|
||||
#include <winpr/collections.h>
|
||||
|
||||
#include <winpr/pipe.h>
|
||||
|
||||
@ -59,17 +58,22 @@
|
||||
* the last instance is closed, the named pipe handle is removed from the list.
|
||||
*/
|
||||
|
||||
wArrayList* WinPR_NamedPipeBaseInstances;
|
||||
static wArrayList* g_BaseNamedPipeList;
|
||||
|
||||
static BOOL g_Initialized = FALSE;
|
||||
|
||||
static void InitWinPRPipeModule()
|
||||
{
|
||||
static BOOL bInitialized = FALSE;
|
||||
if (g_Initialized) return;
|
||||
|
||||
if (bInitialized) return;
|
||||
g_BaseNamedPipeList = ArrayList_New(TRUE);
|
||||
|
||||
WinPR_NamedPipeBaseInstances = ArrayList_New(TRUE);
|
||||
g_Initialized = TRUE;
|
||||
}
|
||||
|
||||
bInitialized = TRUE;
|
||||
wArrayList* WinPR_GetBaseNamedPipeList()
|
||||
{
|
||||
return g_BaseNamedPipeList;
|
||||
}
|
||||
|
||||
|
||||
@ -141,17 +145,17 @@ HANDLE CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD
|
||||
/* Find the base named pipe instance (i.e., the first instance). */
|
||||
pBaseNamedPipe = NULL;
|
||||
|
||||
ArrayList_Lock(WinPR_NamedPipeBaseInstances);
|
||||
for (index = 0; index < ArrayList_Count(WinPR_NamedPipeBaseInstances); index++)
|
||||
ArrayList_Lock(g_BaseNamedPipeList);
|
||||
for (index = 0; index < ArrayList_Count(g_BaseNamedPipeList); index++)
|
||||
{
|
||||
WINPR_NAMED_PIPE* p = (WINPR_NAMED_PIPE*) ArrayList_GetItem(WinPR_NamedPipeBaseInstances, index);
|
||||
WINPR_NAMED_PIPE* p = (WINPR_NAMED_PIPE*) ArrayList_GetItem(g_BaseNamedPipeList, index);
|
||||
if (strcmp(p->name, lpName) == 0)
|
||||
{
|
||||
pBaseNamedPipe = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
ArrayList_Unlock(WinPR_NamedPipeBaseInstances);
|
||||
ArrayList_Unlock(g_BaseNamedPipeList);
|
||||
|
||||
pNamedPipe = (WINPR_NAMED_PIPE*) malloc(sizeof(WINPR_NAMED_PIPE));
|
||||
hNamedPipe = (HANDLE) pNamedPipe;
|
||||
@ -226,9 +230,7 @@ HANDLE CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD
|
||||
UnixChangeFileMode(pNamedPipe->lpFilePath, 0xFFFF);
|
||||
|
||||
/* Add the named pipe to the list of base named pipe instances. */
|
||||
ArrayList_Lock(WinPR_NamedPipeBaseInstances);
|
||||
ArrayList_Add(WinPR_NamedPipeBaseInstances, pNamedPipe);
|
||||
ArrayList_Unlock(WinPR_NamedPipeBaseInstances);
|
||||
ArrayList_Add(g_BaseNamedPipeList, pNamedPipe);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -23,6 +23,7 @@
|
||||
#ifndef _WIN32
|
||||
|
||||
#include <winpr/pipe.h>
|
||||
#include <winpr/collections.h>
|
||||
|
||||
#include "../handle/handle.h"
|
||||
|
||||
@ -34,11 +35,13 @@ struct winpr_pipe
|
||||
};
|
||||
typedef struct winpr_pipe WINPR_PIPE;
|
||||
|
||||
typedef struct winpr_named_pipe WINPR_NAMED_PIPE;
|
||||
|
||||
struct winpr_named_pipe
|
||||
{
|
||||
WINPR_HANDLE_DEF();
|
||||
|
||||
struct winpr_named_pipe* pBaseNamedPipe;
|
||||
WINPR_NAMED_PIPE* pBaseNamedPipe;
|
||||
|
||||
DWORD dwRefCount;
|
||||
|
||||
@ -59,7 +62,16 @@ struct winpr_named_pipe
|
||||
DWORD dwFlagsAndAttributes;
|
||||
LPOVERLAPPED lpOverlapped;
|
||||
};
|
||||
typedef struct winpr_named_pipe WINPR_NAMED_PIPE;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
wArrayList* WinPR_GetBaseNamedPipeList();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user