Connect client and server side upon client side creation only if both sides were created by the same thread. Modified: trunk/reactos/drivers/fs/np/create.c Modified: trunk/reactos/drivers/fs/np/fsctrl.c Modified: trunk/reactos/drivers/fs/np/npfs.h _____
Modified: trunk/reactos/drivers/fs/np/create.c --- trunk/reactos/drivers/fs/np/create.c 2005-01-01 14:35:46 UTC (rev 12703) +++ trunk/reactos/drivers/fs/np/create.c 2005-01-01 14:54:25 UTC (rev 12704) @@ -1,4 +1,4 @@
-/* $Id: create.c,v 1.28 2004/12/30 16:15:10 ekohl Exp $ +/* $Id$ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -157,6 +157,7 @@ return STATUS_NO_MEMORY; }
+ ClientFcb->Thread = (struct ETHREAD *)Irp->Tail.Overlay.Thread; ClientFcb->Pipe = Pipe; ClientFcb->PipeEnd = FILE_PIPE_CLIENT_END; ClientFcb->OtherSide = NULL; @@ -197,7 +198,8 @@ /* Add the client FCB to the pipe FCB list. */ InsertTailList(&Pipe->ClientFcbListHead, &ClientFcb->FcbListEntry);
- if (ServerFcb) + /* Connect pipes if they were created by the same thread */ + if (ServerFcb && ServerFcb->Thread == ClientFcb->Thread) { ClientFcb->OtherSide = ServerFcb; ServerFcb->OtherSide = ClientFcb; @@ -254,6 +256,7 @@ return STATUS_NO_MEMORY; }
+ Fcb->Thread = (struct ETHREAD *)Irp->Tail.Overlay.Thread; KeLockMutex(&DeviceExt->PipeListLock);
/* _____
Modified: trunk/reactos/drivers/fs/np/fsctrl.c --- trunk/reactos/drivers/fs/np/fsctrl.c 2005-01-01 14:35:46 UTC (rev 12703) +++ trunk/reactos/drivers/fs/np/fsctrl.c 2005-01-01 14:54:25 UTC (rev 12704) @@ -1,4 +1,4 @@
-/* $Id: fsctrl.c,v 1.18 2004/12/30 12:34:27 ekohl Exp $ +/* $Id$ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -59,7 +59,6 @@ break; }
- #if 0 if (ClientFcb->PipeState == FILE_PIPE_LISTENING_STATE) { _____
Modified: trunk/reactos/drivers/fs/np/npfs.h --- trunk/reactos/drivers/fs/np/npfs.h 2005-01-01 14:35:46 UTC (rev 12703) +++ trunk/reactos/drivers/fs/np/npfs.h 2005-01-01 14:54:25 UTC (rev 12704) @@ -1,4 +1,4 @@
-/* $Id: npfs.h,v 1.17 2004/05/10 19:58:10 navaraf Exp $ */ +/* $Id$ */
#ifndef __SERVICES_FS_NP_NPFS_H #define __SERVICES_FS_NP_NPFS_H @@ -9,7 +9,7 @@ */ #define FIN_WORKAROUND_READCLOSE
-typedef struct +typedef struct _NPFS_DEVICE_EXTENSION { LIST_ENTRY PipeListHead; KMUTEX PipeListLock; @@ -18,7 +18,7 @@ ULONG MaxQuota; } NPFS_DEVICE_EXTENSION, *PNPFS_DEVICE_EXTENSION;
-typedef struct +typedef struct _NPFS_PIPE { UNICODE_STRING PipeName; LIST_ENTRY PipeListEntry; @@ -41,6 +41,7 @@ { LIST_ENTRY FcbListEntry; struct _NPFS_FCB* OtherSide; + struct ETHREAD *Thread; PNPFS_PIPE Pipe; KEVENT ConnectEvent; KEVENT Event;