SCLogDebug("%s starting", tv->name);
if (s->SlotThreadInit != NULL) {
- r = s->SlotThreadInit(tv, s->slot_initdata, &s->slot_data);
+ 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);
}
+ SC_ATOMIC_CAS(&s->slot_data, SC_ATOMIC_GET(s->slot_data), slot_data);
}
memset(&s->slot_pre_pq, 0, sizeof(PacketQueue));
memset(&s->slot_post_pq, 0, sizeof(PacketQueue));
* the Batcher TM(which is waiting on a cond from the previous
* feeder TM). Please handle the NULL packet case in the
* function that you now call */
- r = s->SlotFunc(tv, p, s->slot_data, NULL, NULL);
+ r = s->SlotFunc(tv, p, SC_ATOMIC_GET(s->slot_data), NULL, NULL);
} else {
- r = s->SlotFunc(tv, p, s->slot_data, NULL, NULL);
+ r = s->SlotFunc(tv, p, SC_ATOMIC_GET(s->slot_data), NULL, NULL);
/* handle error */
if (r == TM_ECODE_FAILED) {
TmqhOutputPacketpool(tv, p);
TmThreadWaitForFlag(tv, THV_DEINIT);
if (s->SlotThreadExitPrintStats != NULL) {
- s->SlotThreadExitPrintStats(tv, s->slot_data);
+ s->SlotThreadExitPrintStats(tv, SC_ATOMIC_GET(s->slot_data));
}
if (s->SlotThreadDeinit != NULL) {
- r = s->SlotThreadDeinit(tv, s->slot_data);
+ r = s->SlotThreadDeinit(tv, SC_ATOMIC_GET(s->slot_data));
if (r != TM_ECODE_OK) {
TmThreadsSetFlag(tv, THV_CLOSED);
pthread_exit((void *) -1);
TmThreadSetupOptions(tv);
if (s->SlotThreadInit != NULL) {
- r = s->SlotThreadInit(tv, s->slot_initdata, &s->slot_data);
+ 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);
}
+ SC_ATOMIC_CAS(&s->slot_data, SC_ATOMIC_GET(s->slot_data), slot_data);
}
memset(&s->slot_pre_pq, 0, sizeof(PacketQueue));
memset(&s->slot_post_pq, 0, sizeof(PacketQueue));
while (run) {
TmThreadTestThreadUnPaused(tv);
- r = s->SlotFunc(tv, NULL, s->slot_data, &s->slot_pre_pq, &s->slot_post_pq);
+ r = s->SlotFunc(tv, NULL, SC_ATOMIC_GET(s->slot_data), &s->slot_pre_pq, &s->slot_post_pq);
/* handle error */
if (r == TM_ECODE_FAILED) {
TmThreadWaitForFlag(tv, THV_DEINIT);
if (s->SlotThreadExitPrintStats != NULL) {
- s->SlotThreadExitPrintStats(tv, s->slot_data);
+ s->SlotThreadExitPrintStats(tv, SC_ATOMIC_GET(s->slot_data));
}
if (s->SlotThreadDeinit != NULL) {
- r = s->SlotThreadDeinit(tv, s->slot_data);
+ r = s->SlotThreadDeinit(tv, SC_ATOMIC_GET(s->slot_data));
if (r != TM_ECODE_OK) {
TmThreadsSetFlag(tv, THV_CLOSED);
pthread_exit((void *) -1);
TmThreadSetupOptions(tv);
if (s->SlotThreadInit != NULL) {
- r = s->SlotThreadInit(tv, s->slot_initdata, &s->slot_data);
+ 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);
}
+ SC_ATOMIC_CAS(&s->slot_data, SC_ATOMIC_GET(s->slot_data), slot_data);
}
memset(&s->slot_pre_pq, 0, sizeof(PacketQueue));
memset(&s->slot_post_pq, 0, sizeof(PacketQueue));
p = tv->tmqh_in(tv);
PACKET_PROFILING_TMM_START(p, s->tm_id);
- r = s->SlotFunc(tv, p, s->slot_data, /* no outqh no pq */ NULL,
+ r = s->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);
TmThreadWaitForFlag(tv, THV_DEINIT);
if (s->SlotThreadExitPrintStats != NULL) {
- s->SlotThreadExitPrintStats(tv, s->slot_data);
+ s->SlotThreadExitPrintStats(tv, SC_ATOMIC_GET(s->slot_data));
}
if (s->SlotThreadDeinit != NULL) {
- r = s->SlotThreadDeinit(tv, s->slot_data);
+ r = s->SlotThreadDeinit(tv, SC_ATOMIC_GET(s->slot_data));
if (r != TM_ECODE_OK) {
TmThreadsSetFlag(tv, THV_CLOSED);
pthread_exit((void *) -1);
SCLogDebug("%s starting", tv->name);
if (s->SlotThreadInit != NULL) {
- r = s->SlotThreadInit(tv, s->slot_initdata, &s->slot_data);
+ 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);
}
+ SC_ATOMIC_CAS(&s->slot_data, SC_ATOMIC_GET(s->slot_data), slot_data);
}
memset(&s->slot_pre_pq, 0, sizeof(PacketQueue));
memset(&s->slot_post_pq, 0, sizeof(PacketQueue));
while (run) {
TmThreadTestThreadUnPaused(tv);
- r = s->SlotFunc(tv, NULL, s->slot_data, /* no outqh, no pq */NULL, NULL);
+ r = s->SlotFunc(tv, NULL, SC_ATOMIC_GET(s->slot_data), /* no outqh, no pq */NULL, NULL);
/* handle error */
if (r == TM_ECODE_FAILED) {
TmThreadWaitForFlag(tv, THV_DEINIT);
if (s->SlotThreadExitPrintStats != NULL) {
- s->SlotThreadExitPrintStats(tv, s->slot_data);
+ s->SlotThreadExitPrintStats(tv, SC_ATOMIC_GET(s->slot_data));
}
if (s->SlotThreadDeinit != NULL) {
- r = s->SlotThreadDeinit(tv, s->slot_data);
+ r = s->SlotThreadDeinit(tv, SC_ATOMIC_GET(s->slot_data));
if (r != TM_ECODE_OK) {
TmThreadsSetFlag(tv, THV_CLOSED);
pthread_exit((void *) -1);
SCLogDebug("%s starting", tv->name);
if (s->SlotThreadInit != NULL) {
- r = s->SlotThreadInit(tv, s->slot_initdata, &s->slot_data);
+ 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);
}
+ SC_ATOMIC_CAS(&s->slot_data, SC_ATOMIC_GET(s->slot_data), slot_data);
}
memset(&s->slot_pre_pq, 0, sizeof(PacketQueue));
SCMutexInit(&s->slot_pre_pq.mutex_q, NULL);
if (p != NULL) {
PACKET_PROFILING_TMM_START(p, s->tm_id);
- r = s->SlotFunc(tv, p, s->slot_data, &s->slot_pre_pq,
+ r = s->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);
TmThreadWaitForFlag(tv, THV_DEINIT);
if (s->SlotThreadExitPrintStats != NULL) {
- s->SlotThreadExitPrintStats(tv, s->slot_data);
+ s->SlotThreadExitPrintStats(tv, SC_ATOMIC_GET(s->slot_data));
}
if (s->SlotThreadDeinit != NULL) {
- r = s->SlotThreadDeinit(tv, s->slot_data);
+ r = s->SlotThreadDeinit(tv, SC_ATOMIC_GET(s->slot_data));
if (r != TM_ECODE_OK) {
TmThreadsSetFlag(tv, THV_CLOSED);
pthread_exit((void *) -1);
PACKET_PROFILING_TMM_START(p, s->tm_id);
if (unlikely(s->id == 0)) {
- r = s->SlotFunc(tv, p, s->slot_data, &s->slot_pre_pq, &s->slot_post_pq);
+ r = s->SlotFunc(tv, p, SC_ATOMIC_GET(s->slot_data), &s->slot_pre_pq, &s->slot_post_pq);
} else {
- r = s->SlotFunc(tv, p, s->slot_data, &s->slot_pre_pq, NULL);
+ r = s->SlotFunc(tv, p, SC_ATOMIC_GET(s->slot_data), &s->slot_pre_pq, NULL);
}
PACKET_PROFILING_TMM_END(p, s->tm_id);
for (slot = s; slot != NULL; slot = slot->slot_next) {
if (slot->SlotThreadInit != NULL) {
- r = slot->SlotThreadInit(tv, slot->slot_initdata, &slot->slot_data);
+ void *slot_data = NULL;
+ r = slot->SlotThreadInit(tv, slot->slot_initdata, &slot_data);
if (r != TM_ECODE_OK) {
EngineKill();
TmThreadsSetFlag(tv, THV_CLOSED | THV_RUNNING_DONE);
pthread_exit((void *) -1);
}
+ SC_ATOMIC_CAS(&slot->slot_data, SC_ATOMIC_GET(slot->slot_data), slot_data);
}
memset(&slot->slot_pre_pq, 0, sizeof(PacketQueue));
SCMutexInit(&slot->slot_pre_pq.mutex_q, NULL);
while(run) {
TmThreadTestThreadUnPaused(tv);
- r = s->PktAcqLoop(tv, s->slot_data, s);
+ r = s->PktAcqLoop(tv, SC_ATOMIC_GET(s->slot_data), s);
if (r == TM_ECODE_FAILED || TmThreadsCheckFlag(tv, THV_KILL)) {
run = 0;
for (slot = s; slot != NULL; slot = slot->slot_next) {
if (slot->SlotThreadExitPrintStats != NULL) {
- slot->SlotThreadExitPrintStats(tv, slot->slot_data);
+ slot->SlotThreadExitPrintStats(tv, SC_ATOMIC_GET(slot->slot_data));
}
if (slot->SlotThreadDeinit != NULL) {
- r = slot->SlotThreadDeinit(tv, slot->slot_data);
+ r = slot->SlotThreadDeinit(tv, SC_ATOMIC_GET(slot->slot_data));
if (r != TM_ECODE_OK) {
TmThreadsSetFlag(tv, THV_CLOSED);
pthread_exit((void *) -1);
for (; s != NULL; s = s->slot_next) {
if (s->SlotThreadInit != NULL) {
- r = s->SlotThreadInit(tv, s->slot_initdata, &s->slot_data);
+ 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);
}
+ SC_ATOMIC_CAS(&s->slot_data, SC_ATOMIC_GET(s->slot_data), slot_data);
}
memset(&s->slot_pre_pq, 0, sizeof(PacketQueue));
SCMutexInit(&s->slot_pre_pq.mutex_q, NULL);
for ( ; s != NULL; s = s->slot_next) {
if (s->SlotThreadExitPrintStats != NULL) {
- s->SlotThreadExitPrintStats(tv, s->slot_data);
+ s->SlotThreadExitPrintStats(tv, SC_ATOMIC_GET(s->slot_data));
}
if (s->SlotThreadDeinit != NULL) {
- r = s->SlotThreadDeinit(tv, s->slot_data);
+ r = s->SlotThreadDeinit(tv, SC_ATOMIC_GET(s->slot_data));
if (r != TM_ECODE_OK) {
TmThreadsSetFlag(tv, THV_CLOSED);
pthread_exit((void *) -1);
if (slot == NULL)
return;
memset(slot, 0, sizeof(TmSlot));
+ SC_ATOMIC_INIT(slot->slot_data);
slot->tv = tv;
slot->SlotThreadInit = tm->ThreadInit;
slot->slot_initdata = data;