Fix tunnel packet handling.

remotes/origin/master-1.0.x
Victor Julien 16 years ago
parent e7f8a02484
commit 391e69e699

@ -126,7 +126,8 @@ Packet *SetupPktWait (void)
* we can exit on signals received */ * we can exit on signals received */
} }
} while (p == NULL); } while (p == NULL);
memset(p, 0, sizeof(Packet));
memset(p, 0, sizeof(Packet));
return p; return p;
} }
@ -161,7 +162,8 @@ Packet *TunnelPktSetup(ThreadVars *t, DecodeThreadVars *dtv, Packet *parent, uin
//printf("TunnelPktSetup: pkt %p, len %" PRIu32 ", proto %" PRIu32 "\n", pkt, len, proto); //printf("TunnelPktSetup: pkt %p, len %" PRIu32 ", proto %" PRIu32 "\n", pkt, len, proto);
/* get us a packet */ /* get us a packet */
Packet *p = NULL; Packet *p = SetupPkt();
#if 0
do { do {
mutex_lock(&packet_q.mutex_q); mutex_lock(&packet_q.mutex_q);
p = PacketDequeue(&packet_q); p = PacketDequeue(&packet_q);
@ -175,7 +177,7 @@ Packet *TunnelPktSetup(ThreadVars *t, DecodeThreadVars *dtv, Packet *parent, uin
* we can exit on signals received */ * we can exit on signals received */
} }
} while (p == NULL); } while (p == NULL);
#endif
mutex_lock(&mutex_pending); mutex_lock(&mutex_pending);
pending++; pending++;
#ifdef DBG_PERF #ifdef DBG_PERF

@ -90,7 +90,7 @@ void TmqhOutputPacketpool(ThreadVars *t, Packet *p)
TUNNEL_DECR_PKT_TPR_NOLOCK(p); TUNNEL_DECR_PKT_TPR_NOLOCK(p);
/* handle the root */ /* handle the root */
//printf("TmqhOutputPacketpool: calling PacketEnqueue for root pkt\n"); //printf("TmqhOutputPacketpool: calling PacketEnqueue for root pkt, p->root %p (%p)\n", p->root, p);
proot = 1; proot = 1;
/* fall through */ /* fall through */
@ -107,15 +107,17 @@ void TmqhOutputPacketpool(ThreadVars *t, Packet *p)
FlowDecrUsecnt(t,p); FlowDecrUsecnt(t,p);
if (proot) { if (proot && p->root != NULL) {
CLEAR_PACKET(p->root); CLEAR_PACKET(p->root);
mutex_lock(&q->mutex_q);
PacketEnqueue(q, p->root);
mutex_unlock(&q->mutex_q);
} }
CLEAR_PACKET(p); CLEAR_PACKET(p);
mutex_lock(&q->mutex_q); mutex_lock(&q->mutex_q);
if (proot) {
PacketEnqueue(q, p->root);
}
PacketEnqueue(q, p); PacketEnqueue(q, p);
mutex_unlock(&q->mutex_q); mutex_unlock(&q->mutex_q);
@ -123,6 +125,13 @@ void TmqhOutputPacketpool(ThreadVars *t, Packet *p)
//printf("TmqhOutputPacketpool: pending %" PRIu32 "\n", pending); //printf("TmqhOutputPacketpool: pending %" PRIu32 "\n", pending);
if (pending > 0) { if (pending > 0) {
pending--; pending--;
if (proot) {
if (pending > 0) {
pending--;
} else {
printf("TmqhOutputPacketpool: warning, trying to subtract from 0 pending counter (tunnel root).\n");
}
}
} else { } else {
printf("TmqhOutputPacketpool: warning, trying to subtract from 0 pending counter.\n"); printf("TmqhOutputPacketpool: warning, trying to subtract from 0 pending counter.\n");
} }

Loading…
Cancel
Save