[project,bus] Two commits: #inclusion and bus freeing
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Tue, 21 Dec 2010 20:55:44 +0000 (15:55 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Tue, 21 Dec 2010 20:55:44 +0000 (15:55 -0500)
Unfortunately, this is two commits as one.

A bus thread will not attempt to free the bus, making a
caller or another thread responsible.

Make header #include guards consistently named.

24 files changed:
src/include/aoe.h
src/include/bus.h
src/include/byte.h
src/include/debug.h
src/include/device.h
src/include/disk.h
src/include/driver.h
src/include/filedisk.h
src/include/grub4dos.h
src/include/mdi.h
src/include/memdisk.h
src/include/mount.h
src/include/msvhd.h
src/include/portable.h
src/include/probe.h
src/include/protocol.h
src/include/ramdisk.h
src/include/registry.h
src/include/winvblock.h
src/include/wv_stdbool.h
src/include/wv_stddef.h
src/include/wv_stdlib.h
src/include/wv_string.h
src/winvblock/bus/bus.c

index 51b4d1a..4a24118 100644 (file)
@@ -18,8 +18,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _aoe_h
-#  define _aoe_h
+#ifndef AOE_M_AOE_H_
+#  define AOE_M_AOE_H_
 
 /**
  * @file
@@ -95,4 +95,4 @@ winvblock__def_struct(aoe__mount_disks)
 
 extern void aoe__reset_probe(void);
 
-#endif  /* _aoe_h */
+#endif  /* AOE_M_AOE_H_ */
index d0c3a8d..c9b849c 100644 (file)
@@ -48,6 +48,7 @@ typedef struct WV_BUS_T {
     WV_FP_BUS_THREAD Thread;
     KEVENT ThreadSignal;
     winvblock__bool Stop;
+    KEVENT ThreadStopped;
     struct {
         LIST_ENTRY Nodes;
         USHORT NodeCount;
index 3fc4581..f52a8d1 100644 (file)
@@ -16,8 +16,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _byte_h
-#  define _byte_h
+#ifndef WV_M_BYTE_H_
+#  define WV_M_BYTE_H_
 
 /**
  * @file
@@ -58,4 +58,4 @@ byte__order_swap (
 #  define byte__rev_array_union( x ) \
   byte__order_swap ( x.bytes, sizeof(x.bytes) )
 
-#endif                         /* _byte_h */
+#endif  /* WV_M_BYTE_H_ */
index a3606ae..41f13ff 100644 (file)
@@ -20,8 +20,8 @@
  * Jul-03-2009@22:39: Initial revision.
  */
 
-#ifndef _DEBUG_H
-#  define _DEBUG_H
+#ifndef WV_M_DEBUG_H_
+#  define WV_M_DEBUG_H_
 
 /**
  * @file
@@ -65,4 +65,4 @@ extern void STDCALL Debug_IrpEnd (
   IN NTSTATUS Status
  );
 
-#endif                         /* _DEBUG_H */
+#endif  /* WV_M_DEBUG_H_ */
index de2ffdf..441b23f 100644 (file)
@@ -18,8 +18,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _WV_M_DEVICE_H_
-#  define _WV_M_DEVICE_H_
+#ifndef WV_M_DEVICE_H_
+#  define WV_M_DEVICE_H_
 
 /**
  * @file
@@ -191,4 +191,4 @@ extern winvblock__lib_func WV_SP_DEV_T WvDevFromDevObj(PDEVICE_OBJECT);
 extern winvblock__lib_func void WvDevForDevObj(PDEVICE_OBJECT, WV_SP_DEV_T);
 extern WV_F_DEV_DISPATCH WvDevPnpQueryId;
 
-#endif  /* _WV_M_DEVICE_H_ */
+#endif  /* WV_M_DEVICE_H_ */
index d75ea31..1d0065d 100644 (file)
@@ -18,8 +18,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _WV_M_DISK_H_
-#  define _WV_M_DISK_H_
+#ifndef WV_M_DISK_H_
+#  define WV_M_DISK_H_
 
 /**
  * @file
@@ -185,4 +185,4 @@ extern winvblock__lib_func WV_SP_DISK_T disk__create(void);
 
 extern NTSTATUS disk__module_init(void);
 
-#endif  /* _WV_M_DISK_H_ */
+#endif  /* WV_M_DISK_H_ */
index 67508e3..793dfa2 100644 (file)
@@ -18,8 +18,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _DRIVER_H
-#  define _DRIVER_H
+#ifndef WV_M_DRIVER_H_
+#  define WV_M_DRIVER_H_
 
 /**
  * @file
@@ -68,4 +68,4 @@ extern winvblock__lib_func NTSTATUS STDCALL driver__complete_irp(
     IN NTSTATUS
   );
 
-#endif /* _DRIVER_H */
+#endif /* WV_M_DRIVER_H_ */
index b5b9cc0..5455c94 100644 (file)
@@ -16,8 +16,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _filedisk_h
-#  define _filedisk_h
+#ifndef WV_M_FILEDISK_H_
+#  define WV_M_FILEDISK_H_
 
 /**
  * @file
@@ -83,4 +83,4 @@ extern void STDCALL filedisk__hot_swap_thread (
   IN void *StartContext
  );
 
-#endif                         /* _filedisk_h */
+#endif  /* WV_M_FILEDISK_H_ */
index 11e3c39..0129f25 100644 (file)
@@ -16,8 +16,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _grub4dos_h
-#  define _grub4dos_h
+#ifndef WV_M_GRUB4DOS_H_
+#  define WV_M_GRUB4DOS_H_
 
 /**
  * @file
@@ -53,4 +53,4 @@ extern void filedisk_grub4dos__find (
   void
  );
 
-#endif                         /* _grub4dos_h */
+#endif  /* WV_M_GRUB4DOS_H_ */
index faac015..a2020d7 100644 (file)
@@ -11,8 +11,8 @@
  *   Boston MA 02111-1307, USA; either version 2 of the License, or
  *   (at your option) any later version; incorporated herein by reference.
  */
-#ifndef _mdi_h
-#  define _mdi_h
+#ifndef WV_M_MDI_H_
+#  define WV_M_MDI_H_
 
 /**
  * @file
@@ -89,4 +89,4 @@ __attribute__ ( ( __packed__ ) );
 #    pragma pack()
 #  endif
 
-#endif                         /* _mdi_h */
+#endif  /* WV_M_MDI_H_ */
index 0f81420..3a90fb8 100644 (file)
@@ -16,8 +16,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _memdisk_h
-#  define _memdisk_h
+#ifndef WV_M_MEMDISK_H_
+#  define WV_M_MEMDISK_H_
 
 /**
  * @file
@@ -30,4 +30,4 @@ extern void memdisk__find (
   void
  );
 
-#endif                         /* _memdisk_h */
+#endif  /* WV_M_MEMDISK_H_ */
index 280a8f0..d411455 100644 (file)
@@ -18,8 +18,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _MOUNT_H
-#  define _MOUNT_H
+#ifndef WV_M_MOUNT_H_
+#  define WV_M_MOUNT_H_
 
 /**
  * @file
@@ -51,4 +51,4 @@ winvblock__def_struct ( mount__filedisk )
   int sectors;
 };
 
-#endif                         /* _MOUNT_H */
+#endif  /* WV_M_MOUNT_H_ */
index dda70f2..f3e2551 100644 (file)
@@ -16,8 +16,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _msvhd_h
-#  define _msvhd_h
+#ifndef WV_M_MSVHD_H_
+#  define WV_M_MSVHD_H_
 
 /**
  * @file
@@ -80,4 +80,4 @@ msvhd__footer_swap_endian (
   byte__rev_array_union ( footer_ptr->checksum );
 }
 
-#endif                         /* _msvhd_h */
+#endif  /* WV_M_MSVHD_H_ */
index 2aca857..1ff42a4 100644 (file)
@@ -18,8 +18,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _PORTABLE_H
-#  define _PORTABLE_H
+#ifndef WV_M_PORTABLE_H_
+#  define WV_M_PORTABLE_H_
 
 /**
  * @file
@@ -56,4 +56,4 @@ typedef unsigned int UINT,
 #    endif
 #  endif
 
-#endif                         /* _PORTABLE_H */
+#endif  /* WV_M_PORTABLE_H_ */
index c8ea576..780eda9 100644 (file)
@@ -18,8 +18,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _WV_M_PROBE_H_
-#  define _WV_M_PROBE_H_
+#ifndef WV_M_PROBE_H_
+#  define WV_M_PROBE_H_
 
 /**
  * @file
@@ -56,4 +56,4 @@ extern WV_SP_PROBE_SAFE_MBR_HOOK STDCALL WvProbeGetSafeHook(
   );
 extern void WvProbeDisks(void);
 
-#endif  /* _WV_M_PROBE_H_ */
+#endif  /* WV_M_PROBE_H_ */
index 17a5b2c..c2ac0ce 100644 (file)
@@ -18,8 +18,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _PROTOCOL_H
-#  define _PROTOCOL_H
+#ifndef AOE_M_PROTOCOL_H_
+#  define AOE_M_PROTOCOL_H_
 
 /**
  * @file
@@ -48,4 +48,4 @@ extern void Protocol_Stop (
   void
  );
 
-#endif                         /* _PROTOCOL_H */
+#endif  /* AOE_M_PROTOCOL_H_ */
index 4ba545b..a8b86fb 100644 (file)
@@ -16,8 +16,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _ramdisk_h
-#  define _ramdisk_h
+#ifndef WV_M_RAMDISK_H_
+#  define WV_M_RAMDISK_H_
 
 /**
  * @file
@@ -50,4 +50,4 @@ extern ramdisk__type_ptr ramdisk__create (
   void
  );
 
-#endif                         /* _ramdisk_h */
+#endif  /* WV_M_RAMDISK_H_ */
index f107b44..40df523 100644 (file)
@@ -18,8 +18,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _REGISTRY_H
-#  define _REGISTRY_H
+#ifndef WV_M_REGISTRY_H_
+#  define WV_M_REGISTRY_H_
 
 /**
  * @file
@@ -138,4 +138,4 @@ extern winvblock__lib_func NTSTATUS registry__store_dword (
   winvblock__uint32 value
  );
 
-#endif                         /* _REGISTRY_H */
+#endif  /* WV_M_REGISTRY_H_ */
index 2968022..227cf6d 100644 (file)
@@ -17,8 +17,8 @@
  * You should have received a copy of the GNU General Public License
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
  */
-#ifndef _winvblock_h
-#  define _winvblock_h
+#ifndef WV_M_WINVBLOCK_H_
+#  define WV_M_WINVBLOCK_H_
 
 /**
  * @file
@@ -62,4 +62,4 @@ typedef void *winvblock__any_ptr;
 #    define winvblock__lib_func __declspec(dllimport)
 #  endif
 
-#endif                         /* _winvblock_h */
+#endif  /* WV_M_WINVBLOCK_H_ */
index d24d786..4192359 100644 (file)
@@ -16,8 +16,8 @@
  * You should have received a copy of the GNU General Public License\r
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.\r
  */\r
-#ifndef _wv_stdbool_h\r
-#  define _wv_stdbool_h\r
+#ifndef WV_M_STDBOOL_H_\r
+#  define WV_M_STDBOOL_H_\r
 \r
 /* Boolean type. */\r
 typedef unsigned short bool;\r
@@ -26,4 +26,4 @@ typedef unsigned short bool;
 #define false (0)\r
 #define true (1)\r
 \r
-#endif /* _wv_stdbool_h */\r
+#endif  /* WV_M_STDBOOL_H_ */\r
index 5d1e5fa..126c02d 100644 (file)
  * You should have received a copy of the GNU General Public License\r
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.\r
  */\r
-#ifndef _wv_stddef_h\r
-#  define _wv_stddef_h\r
+#ifndef WV_M_STDDEF_H_\r
+#  define WV_M_STDDEF_H_\r
 #  include "stddef.h"\r
 \r
 /* Type for the size, in bytes, of any object. */\r
 typedef size_t wv_size_t;\r
 \r
-#endif /* _wv_stddef_h */\r
+#endif  /* WV_M_STDDEF_H_ */\r
index c1c35f5..3d227c4 100644 (file)
@@ -16,8 +16,8 @@
  * You should have received a copy of the GNU General Public License\r
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.\r
  */\r
-#ifndef _WV_STDLIB_H\r
-#  define _WV_STDLIB_H\r
+#ifndef WV_M_STDLIB_H_\r
+#  define WV_M_STDLIB_H_\r
 \r
 #include "wv_stddef.h"\r
 \r
@@ -36,4 +36,4 @@ void *wv_pallocz(wv_size_t size);
 /* Free allocated memory. */\r
 void wv_free(void *ptr);\r
 \r
-#endif  /* _WV_STDLIB_H */\r
+#endif  /* WV_M_STDLIB_H_ */\r
index 9d19e3f..cd3e949 100644 (file)
  * You should have received a copy of the GNU General Public License\r
  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.\r
  */\r
-#ifndef _wv_string_h\r
-#  define _wv_string_h\r
+#ifndef WV_M_STRING_H_\r
+#  define WV_M_STRING_H_\r
 #  include "wv_stdbool.h"\r
 #  include "wv_stddef.h"\r
 \r
 /* Test two byte ranges in memory for equality. */\r
 bool wv_memcmpeq(const void *s1, const void *s2, wv_size_t n);\r
 \r
-#endif /* _wv_string_h */\r
+#endif  /* WV_M_STRING_H_ */\r
index c2ac8d4..82fed2d 100644 (file)
@@ -259,6 +259,7 @@ winvblock__lib_func void WvBusInit(WV_SP_BUS_T Bus) {
     KeInitializeSpinLock(&Bus->BusPrivate_.WorkItemsLock);
     InitializeListHead(&Bus->BusPrivate_.WorkItems);
     KeInitializeEvent(&Bus->ThreadSignal, SynchronizationEvent, FALSE);
+    KeInitializeEvent(&Bus->ThreadStopped, SynchronizationEvent, FALSE);
     Bus->Dev.Ops.CreatePdo = WvBusCreatePdo_;
     Bus->Dev.Ops.Init = WvBusDevInit_;
     Bus->Dev.Ops.Free = WvBusFree_;
@@ -482,7 +483,7 @@ winvblock__lib_func void WvBusCancelWorkItems(WV_SP_BUS_T Bus) {
     return;
   }
 
-/* The WV_SP_DEV_T::ops.free implementation for a threaded bus. */
+/* The WV_S_DEV_T::Ops.Free implementation for a threaded bus. */
 static void STDCALL WvBusThreadFree_(IN WV_SP_DEV_T dev) {
     WV_SP_BUS_T bus = WvBusFromDev(dev);
 
@@ -496,6 +497,11 @@ static void STDCALL WvBusThreadFree_(IN WV_SP_DEV_T dev) {
  *
  * @v context           The thread context.  In our case, it points to
  *                      the bus that the thread should use in processing.
+ *
+ * Note that we do not attempt to free the bus data; this is a bus
+ * implementor's responsibility.  We do, however, set the ThreadStopped
+ * signal which should mean that resources can be freed, from a completed
+ * thread's perspective.
  */
 static void STDCALL WvBusThread_(IN void * context) {
     WV_SP_BUS_T bus = context;
@@ -506,6 +512,7 @@ static void STDCALL WvBusThread_(IN void * context) {
       }
 
     bus->Thread(bus);
+    KeSetEvent(&bus->ThreadStopped, 0, FALSE);
     return;
   }
 
@@ -527,10 +534,10 @@ static void STDCALL WvBusDefaultThread_(IN WV_SP_BUS_T bus) {
     /* Wake up at least every 30 seconds. */
     timeout.QuadPart = -300000000LL;
 
-    /* Hook WV_SP_DEV_T::ops.free() */
+    /* Hook WV_S_DEV_T::Ops.Free() */
     bus->Dev.Ops.Free = WvBusThreadFree_;
 
-    /* When bus::Stop is set, we shut down. */
+    /* When WV_S_BUS_T::Stop is set, we shut down. */
     while (!bus->Stop) {
         DBG("Alive.\n");
 
@@ -546,10 +553,9 @@ static void STDCALL WvBusDefaultThread_(IN WV_SP_BUS_T bus) {
         KeResetEvent(&bus->ThreadSignal);
 
         WvBusProcessWorkItems(bus);
-      } /* while bus->alive */
+      } /* while !bus->Stop */
 
     WvBusCancelWorkItems(bus);
-    WvBusFree_(&bus->Dev);
     return;
   }
 
@@ -560,8 +566,8 @@ static void STDCALL WvBusDefaultThread_(IN WV_SP_BUS_T bus) {
  * @ret NTSTATUS        The status of the thread creation operation.
  *
  * Also see WV_F_BUS_THREAD in the header for details about the prototype
- * for implementing your own bus thread routine.  You set bus::Thread to
- * specify your own thread routine, then call this function to start it.
+ * for implementing your own bus thread routine.  You set WV_S_BUS_T::Thread
+ * to specify your own thread routine, then call this function to start it.
  */
 winvblock__lib_func NTSTATUS WvBusStartThread(
     WV_SP_BUS_T Bus