- Implement EnumServicesStatusW.
[reactos.git] / reactos / drivers / lib / chew / workqueue.c
index 1f041bc..92e07b2 100644 (file)
@@ -1,16 +1,15 @@
 /*\r
- * COPYRIGHT:   See COPYING in the top level directory\r
- * PROJECT:     ReactOS TCP/IP protocol driver\r
- * FILE:        tcpip/main.c\r
- * PURPOSE:     Common Highlevel Executive Worker\r
- * PROGRAMMERS: Art Yerkes\r
- * REVISIONS:\r
- *   CSH 10/12-2005 Created\r
+ * COPYRIGHT:       See COPYING in the top level directory\r
+ * PROJECT:         ReactOS kernel\r
+ * FILE:            drivers/lib/chew/workqueue.c\r
+ * PURPOSE:         Common Highlevel Executive Worker\r
+ *\r
+ * PROGRAMMERS:     arty (ayerkes@speakeasy.net)\r
  */\r
 #include <ntddk.h>\r
 #include <chew/chew.h>\r
 \r
-//#define NDEBUG\r
+#define NDEBUG\r
 \r
 #define FOURCC(w,x,y,z) (((w) << 24) | ((x) << 16) | ((y) << 8) | (z))\r
 \r
@@ -51,6 +50,8 @@ VOID ChewShutdown() {
 VOID STDCALL ChewWorkItem( PDEVICE_OBJECT DeviceObject, PVOID ChewItem ) {\r
     PWORK_ITEM WorkItem = ChewItem;\r
 \r
+    RemoveEntryList( &WorkItem->Entry );\r
+\r
     if( WorkItem->Worker ) \r
        WorkItem->Worker( WorkItem->UserSpace );\r
 \r
@@ -61,8 +62,10 @@ VOID STDCALL ChewWorkItem( PDEVICE_OBJECT DeviceObject, PVOID ChewItem ) {
 BOOLEAN ChewCreate\r
 ( PVOID *ItemPtr, UINT Bytes, VOID (*Worker)( PVOID ), PVOID UserSpace ) {\r
     PWORK_ITEM Item;\r
+    \r
     if( KeGetCurrentIrql() == PASSIVE_LEVEL ) {\r
-       *ItemPtr = NULL;\r
+       if( ItemPtr )\r
+           *ItemPtr = NULL;\r
        Worker(UserSpace);\r
        return TRUE;\r
     } else {\r
@@ -85,12 +88,14 @@ BOOLEAN ChewCreate
                ( &WorkQueue, &Item->Entry, &WorkQueueLock );\r
            IoQueueWorkItem\r
                ( Item->WorkItem, ChewWorkItem, CriticalWorkQueue, Item );\r
-\r
-           *ItemPtr = Item;\r
+           \r
+           if( ItemPtr ) \r
+               *ItemPtr = Item;\r
 \r
            return TRUE;\r
-       } else\r
+       } else {\r
            return FALSE;\r
+       }\r
     }\r
 }\r
 \r