return TM_ECODE_OK;
}
-/* 1 slot functions */
-void *TmThreadsSlot1NoIn(void *td)
-{
- /* block usr2. usr2 to be handled by the main thread only */
- UtilSignalBlock(SIGUSR2);
-
- ThreadVars *tv = (ThreadVars *)td;
- TmSlot *s = (TmSlot *)tv->tm_slots;
- char run = 1;
- TmEcode r = TM_ECODE_OK;
-
- /* Set the thread name */
- if (SCSetThreadName(tv->name) < 0) {
- SCLogWarning(SC_ERR_THREAD_INIT, "Unable to set thread name");
- }
-
- if (tv->thread_setup_flags != 0)
- TmThreadSetupOptions(tv);
-
- /* Drop the capabilities for this thread */
- SCDropCaps(tv);
-
- PacketPoolInit();
-
- if (s->SlotThreadInit != NULL) {
- void *slot_data = NULL;
- r = s->SlotThreadInit(tv, s->slot_initdata, &slot_data);
- if (r != TM_ECODE_OK) {
- EngineKill();
-
- TmThreadsSetFlag(tv, THV_CLOSED | THV_RUNNING_DONE);
- pthread_exit((void *) -1);
- return NULL;
- }
- (void)SC_ATOMIC_SET(s->slot_data, slot_data);
- }
- memset(&s->slot_pre_pq, 0, sizeof(PacketQueue));
- memset(&s->slot_post_pq, 0, sizeof(PacketQueue));
-
- tv->sc_perf_pca = SCPerfGetAllCountersArray(&tv->sc_perf_pctx);
- SCPerfAddToClubbedTMTable((tv->thread_group_name != NULL) ?
- tv->thread_group_name : tv->name, &tv->sc_perf_pctx);
-
- TmThreadsSetFlag(tv, THV_INIT_DONE);
-
- while (run) {
- if (TmThreadsCheckFlag(tv, THV_PAUSE)) {
- TmThreadsSetFlag(tv, THV_PAUSED);
- TmThreadTestThreadUnPaused(tv);
- TmThreadsUnsetFlag(tv, THV_PAUSED);
- }
- TmSlotFunc SlotFunc = SC_ATOMIC_GET(s->SlotFunc);
-
- r = SlotFunc(tv, NULL, SC_ATOMIC_GET(s->slot_data), &s->slot_pre_pq, &s->slot_post_pq);
-
- /* handle error */
- if (r == TM_ECODE_FAILED) {
- TmqhReleasePacketsToPacketPool(&s->slot_pre_pq);
-
- SCMutexLock(&s->slot_post_pq.mutex_q);
- TmqhReleasePacketsToPacketPool(&s->slot_post_pq);
- SCMutexUnlock(&s->slot_post_pq.mutex_q);
-
- TmThreadsSetFlag(tv, THV_FAILED);
- break;
- }
-
- /* handle pre queue */
- while (s->slot_pre_pq.top != NULL) {
- Packet *extra_p = PacketDequeue(&s->slot_pre_pq);
- if (extra_p != NULL)
- tv->tmqh_out(tv, extra_p);
- }
-
- /* handle post queue */
- if (s->slot_post_pq.top != NULL) {
- SCMutexLock(&s->slot_post_pq.mutex_q);
- while (s->slot_post_pq.top != NULL) {
- Packet *extra_p = PacketDequeue(&s->slot_post_pq);
- if (extra_p != NULL)
- tv->tmqh_out(tv, extra_p);
- }
- SCMutexUnlock(&s->slot_post_pq.mutex_q);
- }
-
- if (TmThreadsCheckFlag(tv, THV_KILL)) {
- SCPerfSyncCounters(tv);
- run = 0;
- }
- } /* while (run) */
-
- PacketPoolDestroy();
-
- TmThreadsSetFlag(tv, THV_RUNNING_DONE);
- TmThreadWaitForFlag(tv, THV_DEINIT);
-
- if (s->SlotThreadExitPrintStats != NULL) {
- s->SlotThreadExitPrintStats(tv, SC_ATOMIC_GET(s->slot_data));
- }
-
- if (s->SlotThreadDeinit != NULL) {
- r = s->SlotThreadDeinit(tv, SC_ATOMIC_GET(s->slot_data));
- if (r != TM_ECODE_OK) {
- TmThreadsSetFlag(tv, THV_CLOSED);
- pthread_exit((void *) -1);
- return NULL;
- }
- }
-
- TmThreadsSetFlag(tv, THV_CLOSED);
- pthread_exit((void *) 0);
- return NULL;
-}
-
-void *TmThreadsSlot1NoOut(void *td)
-{
- /* block usr2. usr2 to be handled by the main thread only */
- UtilSignalBlock(SIGUSR2);
-
- ThreadVars *tv = (ThreadVars *)td;
- TmSlot *s = (TmSlot *)tv->tm_slots;
- Packet *p = NULL;
- char run = 1;
- TmEcode r = TM_ECODE_OK;
-
- /* Set the thread name */
- if (SCSetThreadName(tv->name) < 0) {
- SCLogWarning(SC_ERR_THREAD_INIT, "Unable to set thread name");
- }
-
- if (tv->thread_setup_flags != 0)
- TmThreadSetupOptions(tv);
-
- /* Drop the capabilities for this thread */
- SCDropCaps(tv);
-
- PacketPoolInit();
-
- if (s->SlotThreadInit != NULL) {
- void *slot_data = NULL;
- r = s->SlotThreadInit(tv, s->slot_initdata, &slot_data);
- if (r != TM_ECODE_OK) {
- EngineKill();
-
- TmThreadsSetFlag(tv, THV_CLOSED | THV_RUNNING_DONE);
- pthread_exit((void *) -1);
- return NULL;
- }
- (void)SC_ATOMIC_SET(s->slot_data, slot_data);
- }
- memset(&s->slot_pre_pq, 0, sizeof(PacketQueue));
- memset(&s->slot_post_pq, 0, sizeof(PacketQueue));
-
- tv->sc_perf_pca = SCPerfGetAllCountersArray(&tv->sc_perf_pctx);
- SCPerfAddToClubbedTMTable((tv->thread_group_name != NULL) ?
- tv->thread_group_name : tv->name, &tv->sc_perf_pctx);
-
- TmThreadsSetFlag(tv, THV_INIT_DONE);
-
- while (run) {
- if (TmThreadsCheckFlag(tv, THV_PAUSE)) {
- TmThreadsSetFlag(tv, THV_PAUSED);
- TmThreadTestThreadUnPaused(tv);
- TmThreadsUnsetFlag(tv, THV_PAUSED);
- }
- TmSlotFunc SlotFunc = SC_ATOMIC_GET(s->SlotFunc);
-
- p = tv->tmqh_in(tv);
-
- PACKET_PROFILING_TMM_START(p, s->tm_id);
- r = SlotFunc(tv, p, SC_ATOMIC_GET(s->slot_data), /* no outqh no pq */ NULL,
- /* no outqh no pq */ NULL);
- PACKET_PROFILING_TMM_END(p, s->tm_id);
-
- /* handle error */
- if (r == TM_ECODE_FAILED) {
- TmqhOutputPacketpool(tv, p);
- TmThreadsSetFlag(tv, THV_FAILED);
- break;
- }
-
- if (TmThreadsCheckFlag(tv, THV_KILL)) {
- SCPerfSyncCounters(tv);
- run = 0;
- }
- } /* while (run) */
-
- PacketPoolDestroy();
-
- TmThreadsSetFlag(tv, THV_RUNNING_DONE);
- TmThreadWaitForFlag(tv, THV_DEINIT);
-
- if (s->SlotThreadExitPrintStats != NULL) {
- s->SlotThreadExitPrintStats(tv, SC_ATOMIC_GET(s->slot_data));
- }
-
- if (s->SlotThreadDeinit != NULL) {
- r = s->SlotThreadDeinit(tv, SC_ATOMIC_GET(s->slot_data));
- if (r != TM_ECODE_OK) {
- TmThreadsSetFlag(tv, THV_CLOSED);
- pthread_exit((void *) -1);
- return NULL;
- }
- }
-
- TmThreadsSetFlag(tv, THV_CLOSED);
- pthread_exit((void *) 0);
- return NULL;
-}
-
-void *TmThreadsSlot1NoInOut(void *td)
-{
- /* block usr2. usr2 to be handled by the main thread only */
- UtilSignalBlock(SIGUSR2);
-
- ThreadVars *tv = (ThreadVars *)td;
- TmSlot *s = (TmSlot *)tv->tm_slots;
- char run = 1;
- TmEcode r = TM_ECODE_OK;
-
- /* Set the thread name */
- if (SCSetThreadName(tv->name) < 0) {
- SCLogWarning(SC_ERR_THREAD_INIT, "Unable to set thread name");
- }
-
- if (tv->thread_setup_flags != 0)
- TmThreadSetupOptions(tv);
-
- /* Drop the capabilities for this thread */
- SCDropCaps(tv);
-
- PacketPoolInit();
-
- SCLogDebug("%s starting", tv->name);
-
- if (s->SlotThreadInit != NULL) {
- void *slot_data = NULL;
- r = s->SlotThreadInit(tv, s->slot_initdata, &slot_data);
- if (r != TM_ECODE_OK) {
- EngineKill();
-
- TmThreadsSetFlag(tv, THV_CLOSED | THV_RUNNING_DONE);
- pthread_exit((void *) -1);
- return NULL;
- }
- (void)SC_ATOMIC_SET(s->slot_data, slot_data);
- }
- memset(&s->slot_pre_pq, 0, sizeof(PacketQueue));
- memset(&s->slot_post_pq, 0, sizeof(PacketQueue));
-
- tv->sc_perf_pca = SCPerfGetAllCountersArray(&tv->sc_perf_pctx);
- SCPerfAddToClubbedTMTable((tv->thread_group_name != NULL) ?
- tv->thread_group_name : tv->name, &tv->sc_perf_pctx);
-
- TmThreadsSetFlag(tv, THV_INIT_DONE);
-
- while (run) {
- TmSlotFunc SlotFunc = SC_ATOMIC_GET(s->SlotFunc);
- if (TmThreadsCheckFlag(tv, THV_PAUSE)) {
- TmThreadsSetFlag(tv, THV_PAUSED);
- TmThreadTestThreadUnPaused(tv);
- TmThreadsUnsetFlag(tv, THV_PAUSED);
- }
-
- r = SlotFunc(tv, NULL, SC_ATOMIC_GET(s->slot_data), /* no outqh, no pq */NULL, NULL);
-
- /* handle error */
- if (r == TM_ECODE_FAILED) {
- TmThreadsSetFlag(tv, THV_FAILED);
- break;
- }
-
- if (TmThreadsCheckFlag(tv, THV_KILL)) {
- SCPerfSyncCounters(tv);
- run = 0;
- }
- } /* while (run) */
-
- PacketPoolDestroy();
-
- TmThreadsSetFlag(tv, THV_RUNNING_DONE);
- TmThreadWaitForFlag(tv, THV_DEINIT);
-
- if (s->SlotThreadExitPrintStats != NULL) {
- s->SlotThreadExitPrintStats(tv, SC_ATOMIC_GET(s->slot_data));
- }
-
- if (s->SlotThreadDeinit != NULL) {
- r = s->SlotThreadDeinit(tv, SC_ATOMIC_GET(s->slot_data));
- if (r != TM_ECODE_OK) {
- TmThreadsSetFlag(tv, THV_CLOSED);
- pthread_exit((void *) -1);
- return NULL;
- }
- }
-
- TmThreadsSetFlag(tv, THV_CLOSED);
- pthread_exit((void *) 0);
- return NULL;
-}
-
-void *TmThreadsSlot1(void *td)
-{
- /* block usr2. usr2 to be handled by the main thread only */
- UtilSignalBlock(SIGUSR2);
-
- ThreadVars *tv = (ThreadVars *)td;
- TmSlot *s = (TmSlot *)tv->tm_slots;
- Packet *p = NULL;
- char run = 1;
- TmEcode r = TM_ECODE_OK;
-
- /* Set the thread name */
- if (SCSetThreadName(tv->name) < 0) {
- SCLogWarning(SC_ERR_THREAD_INIT, "Unable to set thread name");
- }
-
- if (tv->thread_setup_flags != 0)
- TmThreadSetupOptions(tv);
-
- /* Drop the capabilities for this thread */
- SCDropCaps(tv);
-
- PacketPoolInit();
-
- SCLogDebug("%s starting", tv->name);
-
- if (s->SlotThreadInit != NULL) {
- void *slot_data = NULL;
- r = s->SlotThreadInit(tv, s->slot_initdata, &slot_data);
- if (r != TM_ECODE_OK) {
- EngineKill();
-
- TmThreadsSetFlag(tv, THV_CLOSED | THV_RUNNING_DONE);
- pthread_exit((void *) -1);
- return NULL;
- }
- (void)SC_ATOMIC_SET(s->slot_data, slot_data);
- }
- memset(&s->slot_pre_pq, 0, sizeof(PacketQueue));
- SCMutexInit(&s->slot_pre_pq.mutex_q, NULL);
- memset(&s->slot_post_pq, 0, sizeof(PacketQueue));
- SCMutexInit(&s->slot_post_pq.mutex_q, NULL);
-
- tv->sc_perf_pca = SCPerfGetAllCountersArray(&tv->sc_perf_pctx);
- SCPerfAddToClubbedTMTable((tv->thread_group_name != NULL) ?
- tv->thread_group_name : tv->name, &tv->sc_perf_pctx);
-
- TmThreadsSetFlag(tv, THV_INIT_DONE);
-
- while (run) {
- if (TmThreadsCheckFlag(tv, THV_PAUSE)) {
- TmThreadsSetFlag(tv, THV_PAUSED);
- TmThreadTestThreadUnPaused(tv);
- TmThreadsUnsetFlag(tv, THV_PAUSED);
- }
-
- /* input a packet */
- p = tv->tmqh_in(tv);
-
- if (p != NULL) {
- TmSlotFunc SlotFunc = SC_ATOMIC_GET(s->SlotFunc);
- PACKET_PROFILING_TMM_START(p, s->tm_id);
- r = SlotFunc(tv, p, SC_ATOMIC_GET(s->slot_data), &s->slot_pre_pq,
- &s->slot_post_pq);
- PACKET_PROFILING_TMM_END(p, s->tm_id);
-
- /* handle error */
- if (r == TM_ECODE_FAILED) {
- TmqhReleasePacketsToPacketPool(&s->slot_pre_pq);
-
- SCMutexLock(&s->slot_post_pq.mutex_q);
- TmqhReleasePacketsToPacketPool(&s->slot_post_pq);
- SCMutexUnlock(&s->slot_post_pq.mutex_q);
-
- TmqhOutputPacketpool(tv, p);
- TmThreadsSetFlag(tv, THV_FAILED);
- break;
- }
-
- while (s->slot_pre_pq.top != NULL) {
- /* handle new packets from this func */
- Packet *extra_p = PacketDequeue(&s->slot_pre_pq);
- if (extra_p != NULL) {
- tv->tmqh_out(tv, extra_p);
- }
- }
-
- /* output the packet */
- tv->tmqh_out(tv, p);
- }
- if (s->slot_post_pq.top != NULL) {
- SCMutexLock(&s->slot_post_pq.mutex_q);
- while (s->slot_post_pq.top != NULL) {
- /* handle new packets from this func */
- Packet *extra_p = PacketDequeue(&s->slot_post_pq);
- if (extra_p != NULL) {
- tv->tmqh_out(tv, extra_p);
- }
- }
- SCMutexUnlock(&s->slot_post_pq.mutex_q);
- }
-
- if (TmThreadsCheckFlag(tv, THV_KILL)) {
- SCPerfSyncCounters(tv);
- run = 0;
- }
- } /* while (run) */
-
- PacketPoolDestroy();
-
- TmThreadsSetFlag(tv, THV_RUNNING_DONE);
- TmThreadWaitForFlag(tv, THV_DEINIT);
-
- if (s->SlotThreadExitPrintStats != NULL) {
- s->SlotThreadExitPrintStats(tv, SC_ATOMIC_GET(s->slot_data));
- }
-
- if (s->SlotThreadDeinit != NULL) {
- r = s->SlotThreadDeinit(tv, SC_ATOMIC_GET(s->slot_data));
- if (r != TM_ECODE_OK) {
- TmThreadsSetFlag(tv, THV_CLOSED);
- pthread_exit((void *) -1);
- return NULL;
- }
- }
-
- SCLogDebug("%s ending", tv->name);
- TmThreadsSetFlag(tv, THV_CLOSED);
- pthread_exit((void *) 0);
- return NULL;
-}
-
/**
* \brief Separate run function so we can call it recursively.
*
}
}
- if (strcmp(name, "1slot") == 0) {
- tv->tm_func = TmThreadsSlot1;
- } else if (strcmp(name, "1slot_noout") == 0) {
- tv->tm_func = TmThreadsSlot1NoOut;
- } else if (strcmp(name, "1slot_noin") == 0) {
- tv->tm_func = TmThreadsSlot1NoIn;
- } else if (strcmp(name, "1slot_noinout") == 0) {
- tv->tm_func = TmThreadsSlot1NoInOut;
- } else if (strcmp(name, "varslot") == 0) {
+ if (strcmp(name, "varslot") == 0) {
tv->tm_func = TmThreadsSlotVar;
} else if (strcmp(name, "pktacqloop") == 0) {
tv->tm_func = TmThreadsSlotPktAcqLoop;