pcap: improve error handling.

Treat TmThreadsSlotProcessPkt return.
remotes/origin/master-1.1.x
Eric Leblond 15 years ago committed by Victor Julien
parent c469824bed
commit 0d7f25580d

@ -77,6 +77,9 @@ typedef struct PcapThreadVars_
ThreadVars *tv; ThreadVars *tv;
TmSlot *slot; TmSlot *slot;
/** callback result -- set if one of the thread module failed. */
int cb_result;
/* pcap buffer size */ /* pcap buffer size */
int pcap_buffer_size; int pcap_buffer_size;
@ -210,7 +213,10 @@ void PcapCallbackLoop(char *user, struct pcap_pkthdr *h, u_char *pkt) {
SCReturn; SCReturn;
} }
TmThreadsSlotProcessPkt(ptv->tv, ptv->slot, p); if (TmThreadsSlotProcessPkt(ptv->tv, ptv->slot, p) != TM_ECODE_OK) {
pcap_breakloop(ptv->pcap_handle);
ptv->cb_result = TM_ECODE_FAILED;
}
SCReturn; SCReturn;
} }
@ -224,6 +230,7 @@ TmEcode ReceivePcapLoop(ThreadVars *tv, void *data, void *slot)
PcapThreadVars *ptv = (PcapThreadVars *)data; PcapThreadVars *ptv = (PcapThreadVars *)data;
TmSlot *s = (TmSlot *)slot; TmSlot *s = (TmSlot *)slot;
ptv->slot = s->slot_next; ptv->slot = s->slot_next;
ptv->cb_result = TM_ECODE_OK;
int r; int r;
SCEnter(); SCEnter();
@ -263,7 +270,11 @@ TmEcode ReceivePcapLoop(ThreadVars *tv, void *data, void *slot)
r = 0; r = 0;
break; break;
} }
} else if (ptv->cb_result == TM_ECODE_FAILED) {
SCLogError(SC_ERR_PCAP_DISPATCH, "Pcap callback PcapCallbackLoop failed");
SCReturnInt(TM_ECODE_FAILED);
} }
SCPerfSyncCountersIfSignalled(tv, 0); SCPerfSyncCountersIfSignalled(tv, 0);
} }

Loading…
Cancel
Save