--- a/sc2src/rcvqueue.h
+++ b/sc2src/rcvqueue.h
@@ -75,8 +75,8 @@
     enum BOrder {BO_MSB, BO_LSB, BO_HOST};
     struct Context {
         Context(WorkQueue<AudioMessage*> *q) : queue(q) {}
-        WorkQueue<AudioMessage*> *queue;
-        ConfSimple *config;
+        WorkQueue<AudioMessage*> *queue{nullptr};
+        ConfSimple *config{nullptr};
     };
 
     // Constructor called by downstream module to set its params
@@ -88,6 +88,11 @@
     /** Worker routine for fetching bufs from the rcvqueue and sending them
      * further. The param is actually an AudioEater::Context */
     void *(*worker)(void *);
+
+    /** Packet counter. This is only used from the watcher thread to
+       detect activity/inactivity, by polling every few seconds, so no
+       need to guard against wraparounds */
+    unsigned int pktcounter{0};
 };
 
 extern void copyswap(unsigned char *dest, const unsigned char *src, 
@@ -95,5 +100,11 @@
 
 extern AudioEater httpAudioEater;
 extern AudioEater alsaAudioEater;
+/* Used by the watcher to close alsa on inactivity if configured to do
+   so. The watcher is only used with alsadirect, and we should move
+   this to alsadirect.h (if it existed...) */
+extern void alsa_close();
+
+extern bool g_quitrequest;
 
 #endif /* _RCVQUEUE_H_INCLUDED_ */