ambrop7 15 лет назад
Родитель
Сommit
bf23ab61fc

+ 1 - 15
flow/DatagramSocketSink.c

@@ -26,13 +26,8 @@
 
 static void report_error (DatagramSocketSink *s, int error)
 {
-    DebugIn_GoIn(&s->d_in_error);
-    DEAD_ENTER(s->dead)
     FlowErrorReporter_ReportError(&s->rep, &error);
-    if (DEAD_LEAVE(s->dead)) {
-        return;
-    }
-    DebugIn_GoOut(&s->d_in_error);
+    return;
 }
 
 static void try_send (DatagramSocketSink *s)
@@ -66,7 +61,6 @@ static void input_handler_send (DatagramSocketSink *s, uint8_t *data, int data_l
 {
     ASSERT(s->in_len == -1)
     ASSERT(data_len >= 0)
-    DebugIn_AmOut(&s->d_in_error);
     DebugObject_Access(&s->d_obj);
     
     // set packet
@@ -81,7 +75,6 @@ static void socket_handler (DatagramSocketSink *s, int event)
 {
     ASSERT(s->in_len >= 0)
     ASSERT(event == BSOCKET_WRITE)
-    DebugIn_AmOut(&s->d_in_error);
     DebugObject_Access(&s->d_obj);
     
     BSocket_DisableEvent(s->bsock, BSOCKET_WRITE);
@@ -102,9 +95,6 @@ void DatagramSocketSink_Init (DatagramSocketSink *s, FlowErrorReporter rep, BSoc
     s->addr = addr;
     s->local_addr = local_addr;
     
-    // init dead var
-    DEAD_INIT(s->dead);
-    
     // add socket event handler
     BSocket_AddEventHandler(s->bsock, BSOCKET_WRITE, (BSocket_handler)socket_handler, s);
     
@@ -114,7 +104,6 @@ void DatagramSocketSink_Init (DatagramSocketSink *s, FlowErrorReporter rep, BSoc
     // have no input packet
     s->in_len = -1;
     
-    DebugIn_Init(&s->d_in_error);
     DebugObject_Init(&s->d_obj);
 }
 
@@ -127,9 +116,6 @@ void DatagramSocketSink_Free (DatagramSocketSink *s)
     
     // remove socket event handler
     BSocket_RemoveEventHandler(s->bsock, BSOCKET_WRITE);
-    
-    // free dead var
-    DEAD_KILL(s->dead);
 }
 
 PacketPassInterface * DatagramSocketSink_GetInput (DatagramSocketSink *s)

+ 0 - 4
flow/DatagramSocketSink.h

@@ -29,8 +29,6 @@
 
 #include <stdint.h>
 
-#include <misc/dead.h>
-#include <misc/debugin.h>
 #include <system/DebugObject.h>
 #include <system/BSocket.h>
 #include <flow/PacketPassInterface.h>
@@ -43,7 +41,6 @@
  * A {@link PacketPassInterface} sink which sends packets to a datagram socket.
  */
 typedef struct {
-    dead_t dead;
     FlowErrorReporter rep;
     BSocket *bsock;
     BAddr addr;
@@ -51,7 +48,6 @@ typedef struct {
     PacketPassInterface input;
     int in_len;
     uint8_t *in;
-    DebugIn d_in_error;
     DebugObject d_obj;
 } DatagramSocketSink;
 

+ 1 - 16
flow/DatagramSocketSource.c

@@ -26,13 +26,8 @@
 
 static void report_error (DatagramSocketSource *s, int error)
 {
-    DebugIn_GoIn(&s->d_in_error);
-    DEAD_ENTER(s->dead)
     FlowErrorReporter_ReportError(&s->rep, &error);
-    if (DEAD_LEAVE(s->dead)) {
-        return;
-    }
-    DebugIn_GoOut(&s->d_in_error);
+    return;
 }
 
 static void try_recv (DatagramSocketSource *s)
@@ -67,7 +62,6 @@ static void try_recv (DatagramSocketSource *s)
 static void output_handler_recv (DatagramSocketSource *s, uint8_t *data)
 {
     ASSERT(!s->out_have)
-    DebugIn_AmOut(&s->d_in_error);
     DebugObject_Access(&s->d_obj);
     
     // set packet
@@ -82,7 +76,6 @@ static void socket_handler (DatagramSocketSource *s, int event)
 {
     ASSERT(s->out_have)
     ASSERT(event == BSOCKET_READ)
-    DebugIn_AmOut(&s->d_in_error);
     DebugObject_Access(&s->d_obj);
     
     BSocket_DisableEvent(s->bsock, BSOCKET_READ);
@@ -94,7 +87,6 @@ static void socket_handler (DatagramSocketSource *s, int event)
 static void retry_job_handler (DatagramSocketSource *s)
 {
     ASSERT(s->out_have)
-    DebugIn_AmOut(&s->d_in_error);
     DebugObject_Access(&s->d_obj);
     
     try_recv(s);
@@ -110,9 +102,6 @@ void DatagramSocketSource_Init (DatagramSocketSource *s, FlowErrorReporter rep,
     s->bsock = bsock;
     s->mtu = mtu;
     
-    // init dead var
-    DEAD_INIT(s->dead);
-    
     // add socket event handler
     BSocket_AddEventHandler(s->bsock, BSOCKET_READ, (BSocket_handler)socket_handler, s);
     
@@ -125,7 +114,6 @@ void DatagramSocketSource_Init (DatagramSocketSource *s, FlowErrorReporter rep,
     // init retry job
     BPending_Init(&s->retry_job, pg, (BPending_handler)retry_job_handler, s);
     
-    DebugIn_Init(&s->d_in_error);
     DebugObject_Init(&s->d_obj);
     #ifndef NDEBUG
     s->have_last_addr = 0;
@@ -144,9 +132,6 @@ void DatagramSocketSource_Free (DatagramSocketSource *s)
     
     // remove socket event handler
     BSocket_RemoveEventHandler(s->bsock, BSOCKET_READ);
-    
-    // free dead var
-    DEAD_KILL(s->dead);
 }
 
 PacketRecvInterface * DatagramSocketSource_GetOutput (DatagramSocketSource *s)

+ 0 - 4
flow/DatagramSocketSource.h

@@ -29,8 +29,6 @@
 
 #include <stdint.h>
 
-#include <misc/dead.h>
-#include <misc/debugin.h>
 #include <system/DebugObject.h>
 #include <system/BSocket.h>
 #include <system/BPending.h>
@@ -43,7 +41,6 @@
  * A {@link PacketRecvInterface} source which receives packets from a datagram socket.
  */
 typedef struct {
-    dead_t dead;
     FlowErrorReporter rep;
     BSocket *bsock;
     int mtu;
@@ -53,7 +50,6 @@ typedef struct {
     BAddr last_addr;
     BIPAddr last_local_addr;
     BPending retry_job;
-    DebugIn d_in_error;
     DebugObject d_obj;
     #ifndef NDEBUG
     int have_last_addr;

+ 1 - 13
flow/PacketPassFairQueue.c

@@ -208,14 +208,8 @@ static void output_handler_done (PacketPassFairQueue *m)
         flow->handler_busy = NULL;
         
         // call handler
-        DEAD_ENTER(m->dead)
         handler(flow->user);
-        if (DEAD_LEAVE(m->dead)) {
-            return;
-        }
-        
-        ASSERT(!m->freeing)
-        ASSERT(!m->sending_flow)
+        return;
     }
 }
 
@@ -225,9 +219,6 @@ void PacketPassFairQueue_Init (PacketPassFairQueue *m, PacketPassInterface *outp
     m->output = output;
     m->pg = pg;
     
-    // init dead var
-    DEAD_INIT(m->dead);
-    
     // init output
     PacketPassInterface_Sender_Init(m->output, (PacketPassInterface_handler_done)output_handler_done, m);
     
@@ -266,9 +257,6 @@ void PacketPassFairQueue_Free (PacketPassFairQueue *m)
     
     // free schedule job
     BPending_Free(&m->schedule_job);
-    
-    // free dead var
-    DEAD_KILL(m->dead);
 }
 
 void PacketPassFairQueue_EnableCancel (PacketPassFairQueue *m)

+ 0 - 2
flow/PacketPassFairQueue.h

@@ -29,7 +29,6 @@
 
 #include <stdint.h>
 
-#include <misc/dead.h>
 #include <system/DebugObject.h>
 #include <system/BPending.h>
 #include <misc/debugcounter.h>
@@ -45,7 +44,6 @@ struct PacketPassFairQueueFlow_s;
  * Fair queue using {@link PacketPassInterface}.
  */
 typedef struct {
-    dead_t dead;
     PacketPassInterface *output;
     struct PacketPassFairQueueFlow_s *sending_flow;
     struct PacketPassFairQueueFlow_s *previous_flow;

+ 6 - 35
flow/PacketPassNotifier.c

@@ -24,53 +24,32 @@
 
 #include <flow/PacketPassNotifier.h>
 
-static int call_handler (PacketPassNotifier *o, uint8_t *data, int data_len);
 static void input_handler_send (PacketPassNotifier *o, uint8_t *data, int data_len);
 static void input_handler_cancel (PacketPassNotifier *o);
 static void output_handler_done (PacketPassNotifier *o);
 
-int call_handler (PacketPassNotifier *o, uint8_t *data, int data_len)
-{
-    ASSERT(o->handler)
-    DebugIn_AmOut(&o->d_in_handler);
-    DebugObject_Access(&o->d_obj);
-    
-    DebugIn_GoIn(&o->d_in_handler);
-    DEAD_ENTER(o->dead)
-    o->handler(o->handler_user, data, data_len);
-    if (DEAD_LEAVE(o->dead)) {
-        return -1;
-    }
-    DebugIn_GoOut(&o->d_in_handler);
-    
-    return 0;
-}
-
 void input_handler_send (PacketPassNotifier *o, uint8_t *data, int data_len)
 {
     ASSERT(!o->d_in_have)
-    DebugIn_AmOut(&o->d_in_handler);
     DebugObject_Access(&o->d_obj);
     
+    #ifndef NDEBUG
+    o->d_in_have = 1;
+    #endif
+    
     // schedule send
     PacketPassInterface_Sender_Send(o->output, data, data_len);
     
     // if we have a handler, call it
     if (o->handler) {
-        if (call_handler(o, data, data_len) < 0) {
-            return;
-        }
+        o->handler(o->handler_user, data, data_len);
+        return;
     }
-    
-    #ifndef NDEBUG
-    o->d_in_have = 1;
-    #endif
 }
 
 void input_handler_cancel (PacketPassNotifier *o)
 {
     ASSERT(o->d_in_have)
-    DebugIn_AmOut(&o->d_in_handler);
     DebugObject_Access(&o->d_obj);
     
     PacketPassInterface_Sender_Cancel(o->output);
@@ -83,7 +62,6 @@ void input_handler_cancel (PacketPassNotifier *o)
 void output_handler_done (PacketPassNotifier *o)
 {
     ASSERT(o->d_in_have)
-    DebugIn_AmOut(&o->d_in_handler);
     DebugObject_Access(&o->d_obj);
     
     PacketPassInterface_Done(&o->input);
@@ -98,9 +76,6 @@ void PacketPassNotifier_Init (PacketPassNotifier *o, PacketPassInterface *output
     // init arguments
     o->output = output;
     
-    // init dead var
-    DEAD_INIT(o->dead);
-    
     // init input
     PacketPassInterface_Init(&o->input, PacketPassInterface_GetMTU(o->output), (PacketPassInterface_handler_send)input_handler_send, o, pg);
     if (PacketPassInterface_HasCancel(o->output)) {
@@ -114,7 +89,6 @@ void PacketPassNotifier_Init (PacketPassNotifier *o, PacketPassInterface *output
     o->handler = NULL;
     
     DebugObject_Init(&o->d_obj);
-    DebugIn_Init(&o->d_in_handler);
     #ifndef NDEBUG
     o->d_in_have = 0;
     #endif
@@ -126,9 +100,6 @@ void PacketPassNotifier_Free (PacketPassNotifier *o)
 
     // free input
     PacketPassInterface_Free(&o->input);
-    
-    // free dead var
-    DEAD_KILL(o->dead);
 }
 
 PacketPassInterface * PacketPassNotifier_GetInput (PacketPassNotifier *o)

+ 0 - 4
flow/PacketPassNotifier.h

@@ -30,8 +30,6 @@
 
 #include <stdint.h>
 
-#include <misc/dead.h>
-#include <misc/debugin.h>
 #include <system/DebugObject.h>
 #include <flow/PacketPassInterface.h>
 
@@ -49,13 +47,11 @@ typedef void (*PacketPassNotifier_handler_notify) (void *user, uint8_t *data, in
  * passing a packet from input to output.
  */
 typedef struct {
-    dead_t dead;
     PacketPassInterface input;
     PacketPassInterface *output;
     PacketPassNotifier_handler_notify handler;
     void *handler_user;
     DebugObject d_obj;
-    DebugIn d_in_handler;
     #ifndef NDEBUG
     int d_in_have;
     #endif

+ 1 - 13
flow/PacketPassPriorityQueue.c

@@ -115,14 +115,8 @@ static void output_handler_done (PacketPassPriorityQueue *m)
         flow->handler_busy = NULL;
         
         // call handler
-        DEAD_ENTER(m->dead)
         handler(flow->user);
-        if (DEAD_LEAVE(m->dead)) {
-            return;
-        }
-        
-        ASSERT(!m->freeing)
-        ASSERT(!m->sending_flow)
+        return;
     }
 }
 
@@ -132,9 +126,6 @@ void PacketPassPriorityQueue_Init (PacketPassPriorityQueue *m, PacketPassInterfa
     m->output = output;
     m->pg = pg;
     
-    // init dead var
-    DEAD_INIT(m->dead);
-    
     // init output
     PacketPassInterface_Sender_Init(m->output, (PacketPassInterface_handler_done)output_handler_done, m);
     
@@ -166,9 +157,6 @@ void PacketPassPriorityQueue_Free (PacketPassPriorityQueue *m)
     
     // free schedule job
     BPending_Free(&m->schedule_job);
-    
-    // free dead var
-    DEAD_KILL(m->dead);
 }
 
 void PacketPassPriorityQueue_EnableCancel (PacketPassPriorityQueue *m)

+ 0 - 2
flow/PacketPassPriorityQueue.h

@@ -29,7 +29,6 @@
 
 #include <stdint.h>
 
-#include <misc/dead.h>
 #include <system/DebugObject.h>
 #include <system/BPending.h>
 #include <misc/debugcounter.h>
@@ -44,7 +43,6 @@ struct PacketPassPriorityQueueFlow_s;
  * Priority queue using {@link PacketPassInterface}.
  */
 typedef struct {
-    dead_t dead;
     PacketPassInterface *output;
     struct PacketPassPriorityQueueFlow_s *sending_flow;
     int sending_len;

+ 14 - 8
flow/PacketProtoDecoder.c

@@ -36,10 +36,16 @@ static void output_handler_done (PacketProtoDecoder *enc);
 
 void report_error (PacketProtoDecoder *enc, int error)
 {
-    DEAD_ENTER(enc->dead)
+    #ifndef NDEBUG
+    DEAD_ENTER(enc->d_dead)
+    #endif
+    
     FlowErrorReporter_ReportError(&enc->rep, &error);
+    
+    #ifndef NDEBUG
     ASSERT(DEAD_KILLED)
-    DEAD_LEAVE(enc->dead);
+    DEAD_LEAVE(enc->d_dead);
+    #endif
 }
 
 void process_data (PacketProtoDecoder *enc)
@@ -117,9 +123,6 @@ int PacketProtoDecoder_Init (PacketProtoDecoder *enc, FlowErrorReporter rep, Str
     enc->input = input;
     enc->output = output;
     
-    // init dead var
-    DEAD_INIT(enc->dead);
-    
     // init input
     StreamRecvInterface_Receiver_Init(enc->input, (StreamRecvInterface_handler_done)input_handler_done, enc);
     
@@ -143,6 +146,9 @@ int PacketProtoDecoder_Init (PacketProtoDecoder *enc, FlowErrorReporter rep, Str
     StreamRecvInterface_Receiver_Recv(enc->input, enc->buf, enc->buf_size);
     
     DebugObject_Init(&enc->d_obj);
+    #ifndef NDEBUG
+    DEAD_INIT(enc->d_dead);
+    #endif
     
     return 1;
     
@@ -153,12 +159,12 @@ fail0:
 void PacketProtoDecoder_Free (PacketProtoDecoder *enc)
 {
     DebugObject_Free(&enc->d_obj);
+    #ifndef NDEBUG
+    DEAD_KILL(enc->d_dead);
+    #endif
     
     // free buffer
     free(enc->buf);
-    
-    // free dead var
-    DEAD_KILL(enc->dead);
 }
 
 void PacketProtoDecoder_Reset (PacketProtoDecoder *enc)

+ 3 - 1
flow/PacketProtoDecoder.h

@@ -53,7 +53,6 @@
  *       a packet length value which is too big,
  */
 typedef struct {
-    dead_t dead;
     FlowErrorReporter rep;
     StreamRecvInterface *input;
     PacketPassInterface *output;
@@ -63,6 +62,9 @@ typedef struct {
     int buf_used;
     uint8_t *buf;
     DebugObject d_obj;
+    #ifndef NDEBUG
+    dead_t d_dead;
+    #endif
 } PacketProtoDecoder;
 
 /**

+ 2 - 30
flow/PacketRecvNotifier.c

@@ -24,30 +24,11 @@
 
 #include <flow/PacketRecvNotifier.h>
 
-static int call_handler (PacketRecvNotifier *o, uint8_t *data, int data_len);
 static void output_handler_recv (PacketRecvNotifier *o, uint8_t *data);
 static void input_handler_done (PacketRecvNotifier *o, int data_len);
 
-int call_handler (PacketRecvNotifier *o, uint8_t *data, int data_len)
-{
-    ASSERT(o->handler)
-    DebugIn_AmOut(&o->d_in_handler);
-    DebugObject_Access(&o->d_obj);
-    
-    DebugIn_GoIn(&o->d_in_handler);
-    DEAD_ENTER(o->dead)
-    o->handler(o->handler_user, data, data_len);
-    if (DEAD_LEAVE(o->dead)) {
-        return -1;
-    }
-    DebugIn_GoOut(&o->d_in_handler);
-    
-    return 0;
-}
-
 void output_handler_recv (PacketRecvNotifier *o, uint8_t *data)
 {
-    DebugIn_AmOut(&o->d_in_handler);
     DebugObject_Access(&o->d_obj);
     
     // schedule receive
@@ -57,7 +38,6 @@ void output_handler_recv (PacketRecvNotifier *o, uint8_t *data)
 
 void input_handler_done (PacketRecvNotifier *o, int data_len)
 {
-    DebugIn_AmOut(&o->d_in_handler);
     DebugObject_Access(&o->d_obj);
     
     // finish packet
@@ -65,9 +45,8 @@ void input_handler_done (PacketRecvNotifier *o, int data_len)
     
     // if we have a handler, call it
     if (o->handler) {
-        if (call_handler(o, o->out, data_len) < 0) {
-            return;
-        }
+        o->handler(o->handler_user, o->out, data_len);
+        return;
     }
 }
 
@@ -76,9 +55,6 @@ void PacketRecvNotifier_Init (PacketRecvNotifier *o, PacketRecvInterface *input,
     // set arguments
     o->input = input;
     
-    // init dead var
-    DEAD_INIT(o->dead);
-    
     // init output
     PacketRecvInterface_Init(&o->output, PacketRecvInterface_GetMTU(o->input), (PacketRecvInterface_handler_recv)output_handler_recv, o, pg);
     
@@ -89,7 +65,6 @@ void PacketRecvNotifier_Init (PacketRecvNotifier *o, PacketRecvInterface *input,
     o->handler = NULL;
     
     DebugObject_Init(&o->d_obj);
-    DebugIn_Init(&o->d_in_handler);
 }
 
 void PacketRecvNotifier_Free (PacketRecvNotifier *o)
@@ -98,9 +73,6 @@ void PacketRecvNotifier_Free (PacketRecvNotifier *o)
     
     // free output
     PacketRecvInterface_Free(&o->output);
-    
-    // free dead var
-    DEAD_KILL(o->dead);
 }
 
 PacketRecvInterface * PacketRecvNotifier_GetOutput (PacketRecvNotifier *o)

+ 0 - 4
flow/PacketRecvNotifier.h

@@ -30,8 +30,6 @@
 
 #include <stdint.h>
 
-#include <misc/dead.h>
-#include <misc/debugin.h>
 #include <system/DebugObject.h>
 #include <flow/PacketRecvInterface.h>
 
@@ -50,14 +48,12 @@ typedef void (*PacketRecvNotifier_handler_notify) (void *user, uint8_t *data, in
  * providing a packet to output.
  */
 typedef struct {
-    dead_t dead;
     PacketRecvInterface output;
     PacketRecvInterface *input;
     PacketRecvNotifier_handler_notify handler;
     void *handler_user;
     uint8_t *out;
     DebugObject d_obj;
-    DebugIn d_in_handler;
 } PacketRecvNotifier;
 
 /**

+ 3 - 1
flow/StreamRecvConnector.c

@@ -30,7 +30,9 @@ static void output_handler_recv (StreamRecvConnector *o, uint8_t *data, int data
 {
     ASSERT(data_avail > 0)
     ASSERT(o->out_avail == -1)
-    ASSERT(!o->input || !o->in_blocking)
+    if (o->input) {
+        ASSERT(!o->in_blocking)
+    }
     
     // remember output packet
     o->out_avail = data_avail;

+ 0 - 1
flow/StreamRecvConnector.h

@@ -42,7 +42,6 @@ typedef struct {
     int out_avail;
     uint8_t *out;
     StreamRecvInterface *input;
-    dead_t input_dead;
     int in_blocking;
     DebugObject d_obj;
 } StreamRecvConnector;

+ 14 - 8
flow/StreamSocketSink.c

@@ -26,10 +26,16 @@
 
 static void report_error (StreamSocketSink *s, int error)
 {
-    DEAD_ENTER(s->dead)
+    #ifndef NDEBUG
+    DEAD_ENTER(s->d_dead)
+    #endif
+    
     FlowErrorReporter_ReportError(&s->rep, &error);
+    
+    #ifndef NDEBUG
     ASSERT(DEAD_KILLED)
-    DEAD_LEAVE(s->dead);
+    DEAD_LEAVE(s->d_dead);
+    #endif
 }
 
 static void try_send (StreamSocketSink *s)
@@ -88,9 +94,6 @@ void StreamSocketSink_Init (StreamSocketSink *s, FlowErrorReporter rep, BSocket
     s->rep = rep;
     s->bsock = bsock;
     
-    // init dead var
-    DEAD_INIT(s->dead);
-    
     // add socket event handler
     BSocket_AddEventHandler(s->bsock, BSOCKET_WRITE, (BSocket_handler)socket_handler, s);
     
@@ -101,10 +104,16 @@ void StreamSocketSink_Init (StreamSocketSink *s, FlowErrorReporter rep, BSocket
     s->in_len = -1;
     
     DebugObject_Init(&s->d_obj);
+    #ifndef NDEBUG
+    DEAD_INIT(s->d_dead);
+    #endif
 }
 
 void StreamSocketSink_Free (StreamSocketSink *s)
 {
+    #ifndef NDEBUG
+    DEAD_KILL(s->d_dead);
+    #endif
     DebugObject_Free(&s->d_obj);
     
     // free input
@@ -112,9 +121,6 @@ void StreamSocketSink_Free (StreamSocketSink *s)
     
     // remove socket event handler
     BSocket_RemoveEventHandler(s->bsock, BSOCKET_WRITE);
-    
-    // free dead var
-    DEAD_KILL(s->dead);
 }
 
 StreamPassInterface * StreamSocketSink_GetInput (StreamSocketSink *s)

+ 3 - 1
flow/StreamSocketSink.h

@@ -41,13 +41,15 @@
  * A {@link StreamPassInterface} sink which sends data to a stream socket.
  */
 typedef struct {
-    dead_t dead;
     FlowErrorReporter rep;
     BSocket *bsock;
     StreamPassInterface input;
     int in_len;
     uint8_t *in;
     DebugObject d_obj;
+    #ifndef NDEBUG
+    dead_t d_dead;
+    #endif
 } StreamSocketSink;
 
 /**

+ 14 - 8
flow/StreamSocketSource.c

@@ -26,10 +26,16 @@
 
 static void report_error (StreamSocketSource *s, int error)
 {
-    DEAD_ENTER(s->dead)
+    #ifndef NDEBUG
+    DEAD_ENTER(s->d_dead)
+    #endif
+    
     FlowErrorReporter_ReportError(&s->rep, &error);
+    
+    #ifndef NDEBUG
     ASSERT(DEAD_KILLED)
-    DEAD_LEAVE(s->dead);
+    DEAD_LEAVE(s->d_dead);
+    #endif
 }
 
 static void try_recv (StreamSocketSource *s)
@@ -93,9 +99,6 @@ void StreamSocketSource_Init (StreamSocketSource *s, FlowErrorReporter rep, BSoc
     s->rep = rep;
     s->bsock = bsock;
     
-    // init dead var
-    DEAD_INIT(s->dead);
-    
     // add socket event handler
     BSocket_AddEventHandler(s->bsock, BSOCKET_READ, (BSocket_handler)socket_handler, s);
     
@@ -106,10 +109,16 @@ void StreamSocketSource_Init (StreamSocketSource *s, FlowErrorReporter rep, BSoc
     s->out_avail = -1;
     
     DebugObject_Init(&s->d_obj);
+    #ifndef NDEBUG
+    DEAD_INIT(s->d_dead);
+    #endif
 }
 
 void StreamSocketSource_Free (StreamSocketSource *s)
 {
+    #ifndef NDEBUG
+    DEAD_KILL(s->d_dead);
+    #endif
     DebugObject_Free(&s->d_obj);
     
     // free output
@@ -117,9 +126,6 @@ void StreamSocketSource_Free (StreamSocketSource *s)
     
     // remove socket event handler
     BSocket_RemoveEventHandler(s->bsock, BSOCKET_READ);
-    
-    // free dead var
-    DEAD_KILL(s->dead);
 }
 
 StreamRecvInterface * StreamSocketSource_GetOutput (StreamSocketSource *s)

+ 3 - 1
flow/StreamSocketSource.h

@@ -42,13 +42,15 @@
  * A {@link StreamRecvInterface} source which receives data from a stream socket.
  */
 typedef struct {
-    dead_t dead;
     FlowErrorReporter rep;
     BSocket *bsock;
     StreamRecvInterface output;
     int out_avail;
     uint8_t *out;
     DebugObject d_obj;
+    #ifndef NDEBUG
+    dead_t d_dead;
+    #endif
 } StreamSocketSource;
 
 /**

+ 14 - 8
nspr_support/PRStreamSink.c

@@ -28,10 +28,16 @@
 
 static void report_error (PRStreamSink *s, int error)
 {
-    DEAD_ENTER(s->dead)
+    #ifndef NDEBUG
+    DEAD_ENTER(s->d_dead)
+    #endif
+    
     FlowErrorReporter_ReportError(&s->rep, &error);
+    
+    #ifndef NDEBUG
     ASSERT(DEAD_KILLED)
-    DEAD_LEAVE(s->dead);
+    DEAD_LEAVE(s->d_dead);
+    #endif
 }
 
 static void try_send (PRStreamSink *s)
@@ -88,9 +94,6 @@ void PRStreamSink_Init (PRStreamSink *s, FlowErrorReporter rep, BPRFileDesc *bpr
     s->rep = rep;
     s->bprfd = bprfd;
     
-    // init dead var
-    DEAD_INIT(s->dead);
-    
     // add socket event handler
     BPRFileDesc_AddEventHandler(s->bprfd, PR_POLL_WRITE, (BPRFileDesc_handler)prfd_handler, s);
     
@@ -101,10 +104,16 @@ void PRStreamSink_Init (PRStreamSink *s, FlowErrorReporter rep, BPRFileDesc *bpr
     s->in_len = -1;
     
     DebugObject_Init(&s->d_obj);
+    #ifndef NDEBUG
+    DEAD_INIT(s->d_dead);
+    #endif
 }
 
 void PRStreamSink_Free (PRStreamSink *s)
 {
+    #ifndef NDEBUG
+    DEAD_KILL(s->d_dead);
+    #endif
     DebugObject_Free(&s->d_obj);
     
     // free input
@@ -112,9 +121,6 @@ void PRStreamSink_Free (PRStreamSink *s)
     
     // remove socket event handler
     BPRFileDesc_RemoveEventHandler(s->bprfd, PR_POLL_WRITE);
-    
-    // free dead var
-    DEAD_KILL(s->dead);
 }
 
 StreamPassInterface * PRStreamSink_GetInput (PRStreamSink *s)

+ 3 - 1
nspr_support/PRStreamSink.h

@@ -41,13 +41,15 @@
  * A {@link StreamPassInterface} sink for a NSPR file descriptor (PRFileDesc) via {@link BPRFileDesc}.
  */
 typedef struct {
-    dead_t dead;
     FlowErrorReporter rep;
     BPRFileDesc *bprfd;
     StreamPassInterface input;
     int in_len;
     uint8_t *in;
     DebugObject d_obj;
+    #ifndef NDEBUG
+    dead_t d_dead;
+    #endif
 } PRStreamSink;
 
 /**

+ 14 - 8
nspr_support/PRStreamSource.c

@@ -28,10 +28,16 @@
 
 static void report_error (PRStreamSource *s, int error)
 {
-    DEAD_ENTER(s->dead)
+    #ifndef NDEBUG
+    DEAD_ENTER(s->d_dead)
+    #endif
+    
     FlowErrorReporter_ReportError(&s->rep, &error);
+    
+    #ifndef NDEBUG
     ASSERT(DEAD_KILLED)
-    DEAD_LEAVE(s->dead);
+    DEAD_LEAVE(s->d_dead);
+    #endif
 }
 
 static void try_recv (PRStreamSource *s)
@@ -93,9 +99,6 @@ void PRStreamSource_Init (PRStreamSource *s, FlowErrorReporter rep, BPRFileDesc
     s->rep = rep;
     s->bprfd = bprfd;
     
-    // init dead var
-    DEAD_INIT(s->dead);
-    
     // add socket event handler
     BPRFileDesc_AddEventHandler(s->bprfd, PR_POLL_READ, (BPRFileDesc_handler)prfd_handler, s);
     
@@ -106,10 +109,16 @@ void PRStreamSource_Init (PRStreamSource *s, FlowErrorReporter rep, BPRFileDesc
     s->out_avail = -1;
     
     DebugObject_Init(&s->d_obj);
+    #ifndef NDEBUG
+    DEAD_INIT(s->d_dead);
+    #endif
 }
 
 void PRStreamSource_Free (PRStreamSource *s)
 {
+    #ifndef NDEBUG
+    DEAD_KILL(s->d_dead);
+    #endif
     DebugObject_Free(&s->d_obj);
     
     // free output
@@ -117,9 +126,6 @@ void PRStreamSource_Free (PRStreamSource *s)
     
     // remove socket event handler
     BPRFileDesc_RemoveEventHandler(s->bprfd, PR_POLL_READ);
-    
-    // free dead var
-    DEAD_KILL(s->dead);
 }
 
 StreamRecvInterface * PRStreamSource_GetOutput (PRStreamSource *s)

+ 3 - 1
nspr_support/PRStreamSource.h

@@ -42,13 +42,15 @@
  * A {@link StreamRecvInterface} source for a NSPR file descriptor (PRFileDesc) via {@link BPRFileDesc}.
  */
 typedef struct {
-    dead_t dead;
     FlowErrorReporter rep;
     BPRFileDesc *bprfd;
     StreamRecvInterface output;
     int out_avail;
     uint8_t *out;
     DebugObject d_obj;
+    #ifndef NDEBUG
+    dead_t d_dead;
+    #endif
 } PRStreamSource;
 
 /**