suricata
tm-threads.c File Reference
#include "suricata-common.h"
#include "suricata.h"
#include "stream.h"
#include "runmodes.h"
#include "threadvars.h"
#include "tm-queues.h"
#include "tm-queuehandlers.h"
#include "tm-threads.h"
#include "tmqh-packetpool.h"
#include "threads.h"
#include "util-debug.h"
#include "util-privs.h"
#include "util-cpu.h"
#include "util-optimize.h"
#include "util-profiling.h"
#include "util-signal.h"
#include "queue.h"
Include dependency graph for tm-threads.c:

Go to the source code of this file.

Data Structures

struct  Thread_
 
struct  Threads_
 

Macros

#define MIN_WAIT_TIME   100
 
#define MAX_WAIT_TIME   999999
 
#define STEP   32
 
#define COPY_TIMESTAMP(src, dst)   ((dst)->tv_sec = (src)->tv_sec, (dst)->tv_usec = (src)->tv_usec)
 

Typedefs

typedef struct Thread_ Thread
 
typedef struct Threads_ Threads
 

Functions

int TmThreadsCheckFlag (ThreadVars *tv, uint16_t flag)
 Check if a thread flag is set. More...
 
void TmThreadsSetFlag (ThreadVars *tv, uint16_t flag)
 Set a thread flag. More...
 
void TmThreadsUnsetFlag (ThreadVars *tv, uint16_t flag)
 Unset a thread flag. More...
 
TmEcode TmThreadsSlotVarRun (ThreadVars *tv, Packet *p, TmSlot *slot)
 Separate run function so we can call it recursively. More...
 
ThreadVarsTmThreadsGetTVContainingSlot (TmSlot *tm_slot)
 
void TmSlotSetFuncAppend (ThreadVars *tv, TmModule *tm, const void *data)
 Appends a new entry to the slots. More...
 
TmSlotTmSlotGetSlotForTM (int tm_id)
 Returns the slot holding a TM with the particular tm_id. More...
 
TmEcode TmThreadSetThreadPriority (ThreadVars *tv, int prio)
 Set the thread options (thread priority). More...
 
void TmThreadSetPrio (ThreadVars *tv)
 Adjusting nice value for threads. More...
 
TmEcode TmThreadSetCPUAffinity (ThreadVars *tv, uint16_t cpu)
 Set the thread options (cpu affinity). More...
 
TmEcode TmThreadSetCPU (ThreadVars *tv, uint8_t type)
 
int TmThreadGetNbThreads (uint8_t type)
 
TmEcode TmThreadSetupOptions (ThreadVars *tv)
 Set the thread options (cpu affinitythread). Priority should be already set by pthread_create. More...
 
ThreadVarsTmThreadCreate (const char *name, const char *inq_name, const char *inqh_name, const char *outq_name, const char *outqh_name, const char *slots, void *(*fn_p)(void *), int mucond)
 Creates and returns the TV instance for a new thread. More...
 
ThreadVarsTmThreadCreatePacketHandler (const char *name, const char *inq_name, const char *inqh_name, const char *outq_name, const char *outqh_name, const char *slots)
 Creates and returns a TV instance for a Packet Processing Thread. This function doesn't support custom slots, and hence shouldn't be supplied "custom" as its slot type. All PPT threads are created with a mucond(see TmThreadCreate declaration) of 0. Hence the tv conditional variables are not used to kill the thread. More...
 
ThreadVarsTmThreadCreateMgmtThread (const char *name, void *(fn_p)(void *), int mucond)
 Creates and returns the TV instance for a Management thread(MGMT). This function supports only custom slot functions and hence a function pointer should be sent as an argument. More...
 
ThreadVarsTmThreadCreateMgmtThreadByName (const char *name, const char *module, int mucond)
 Creates and returns the TV instance for a Management thread(MGMT). This function supports only custom slot functions and hence a function pointer should be sent as an argument. More...
 
ThreadVarsTmThreadCreateCmdThreadByName (const char *name, const char *module, int mucond)
 Creates and returns the TV instance for a Command thread (CMD). This function supports only custom slot functions and hence a function pointer should be sent as an argument. More...
 
void TmThreadAppend (ThreadVars *tv, int type)
 Appends this TV to tv_root based on its type. More...
 
void TmThreadRemove (ThreadVars *tv, int type)
 Removes this TV from tv_root based on its type. More...
 
void TmThreadDisableReceiveThreads (void)
 Disable all threads having the specified TMs. More...
 
void TmThreadDisablePacketThreads (void)
 Disable all threads having the specified TMs. More...
 
TmSlotTmThreadGetFirstTmSlotForPartialPattern (const char *tm_name)
 
void TmThreadKillThreadsFamily (int family)
 
void TmThreadKillThreads (void)
 
void TmThreadSetGroupName (ThreadVars *tv, const char *name)
 
void TmThreadClearThreadsFamily (int family)
 
TmEcode TmThreadSpawn (ThreadVars *tv)
 Spawns a thread associated with the ThreadVars instance tv. More...
 
void TmThreadInitMC (ThreadVars *tv)
 Sets the thread flags for a thread instance(tv) More...
 
void TmThreadTestThreadUnPaused (ThreadVars *tv)
 Tests if the thread represented in the arg has been unpaused or not. More...
 
void TmThreadWaitForFlag (ThreadVars *tv, uint16_t flags)
 Waits till the specified flag(s) is(are) set. We don't bother if the kill flag has been set or not on the thread. More...
 
void TmThreadContinue (ThreadVars *tv)
 Unpauses a thread. More...
 
void TmThreadContinueThreads ()
 Unpauses all threads present in tv_root. More...
 
void TmThreadPause (ThreadVars *tv)
 Pauses a thread. More...
 
void TmThreadPauseThreads ()
 Pauses all threads present in tv_root. More...
 
void TmThreadCheckThreadState (void)
 Used to check the thread for certain conditions of failure. More...
 
TmEcode TmThreadWaitOnThreadInit (void)
 Used to check if all threads have finished their initialization. On finding an un-initialized thread, it waits till that thread completes its initialization, before proceeding to the next thread. More...
 
ThreadVarsTmThreadsGetCallingThread (void)
 Returns the TV for the calling thread. More...
 
uint32_t TmThreadCountThreadsByTmmFlags (uint8_t flags)
 returns a count of all the threads that match the flag More...
 
void TmThreadsListThreads (void)
 
int TmThreadsRegisterThread (ThreadVars *tv, const int type)
 
void TmThreadsUnregisterThread (const int id)
 
void TmThreadsSetThreadTimestamp (const int id, const struct timeval *ts)
 
void TmreadsGetMinimalTimestamp (struct timeval *ts)
 
int TmThreadsInjectPacketsById (Packet **packets, const int id)
 

Variables

ThreadVarstv_root [TVT_MAX] = { NULL }
 
SCMutex tv_root_lock = SCMUTEX_INITIALIZER
 

Detailed Description

Author
Victor Julien victo.nosp@m.r@in.nosp@m.linia.nosp@m.c.ne.nosp@m.t
Anoop Saldanha anoop.nosp@m.sald.nosp@m.anha@.nosp@m.gmai.nosp@m.l.com
Eric Leblond eric@.nosp@m.regi.nosp@m.t.org

Thread management functions.

Definition in file tm-threads.c.

Macro Definition Documentation

#define COPY_TIMESTAMP (   src,
  dst 
)    ((dst)->tv_sec = (src)->tv_sec, (dst)->tv_usec = (src)->tv_usec)

Definition at line 2333 of file tm-threads.c.

Referenced by TmreadsGetMinimalTimestamp().

#define MAX_WAIT_TIME   999999

Definition at line 1739 of file tm-threads.c.

Referenced by TmThreadKillThreadsFamily().

#define MIN_WAIT_TIME   100

Definition at line 1738 of file tm-threads.c.

Referenced by TmThreadKillThreadsFamily().

#define STEP   32

Definition at line 2238 of file tm-threads.c.

Referenced by TmThreadsRegisterThread().

Typedef Documentation

typedef struct Thread_ Thread
typedef struct Threads_ Threads

Function Documentation

void TmreadsGetMinimalTimestamp ( struct timeval *  ts)

Definition at line 2334 of file tm-threads.c.

References COPY_TIMESTAMP, Thread_::in_use, SCLogDebug, SCMutexLock, SCMutexUnlock, Threads_::threads, Threads_::threads_size, and Thread_::ts.

Referenced by TimeGet().

Here is the caller graph for this function:

TmSlot* TmSlotGetSlotForTM ( int  tm_id)

Returns the slot holding a TM with the particular tm_id.

Parameters
tm_idTM id of the TM whose slot has to be returned.
Return values
slotsPointer to the slot.

Definition at line 865 of file tm-threads.c.

References ThreadVars_::next, SCGetThreadIdLong, SCLogDebug, SCMutexLock, SCMutexUnlock, TmSlot_::slot_next, TmSlot_::tm_id, ThreadVars_::tm_slots, tv_root_lock, and TVT_MAX.

void TmThreadAppend ( ThreadVars tv,
int  type 
)

Appends this TV to tv_root based on its type.

Parameters
typeholds the type this TV belongs to.

Definition at line 1342 of file tm-threads.c.

References ThreadVars_::next, ThreadVars_::prev, SCMutexLock, SCMutexUnlock, tv_root_lock, and type.

Referenced by TmThreadSpawn().

Here is the caller graph for this function:

void TmThreadCheckThreadState ( void  )

Used to check the thread for certain conditions of failure.

Definition at line 2051 of file tm-threads.c.

References FatalError, ThreadVars_::name, ThreadVars_::next, SC_ERR_FATAL, SCMutexLock, SCMutexUnlock, THV_FAILED, TmThreadsCheckFlag(), tv_root_lock, and TVT_MAX.

Referenced by PostRunDeinit().

Here is the call graph for this function:

Here is the caller graph for this function:

void TmThreadClearThreadsFamily ( int  family)

Definition at line 1830 of file tm-threads.c.

References ThreadVars_::next, SCMutexLock, SCMutexUnlock, tv_root_lock, and TVT_MAX.

Referenced by PostRunDeinit().

Here is the caller graph for this function:

void TmThreadContinue ( ThreadVars tv)

Unpauses a thread.

Parameters
tvPointer to a TV instance that has to be unpaused

Definition at line 1985 of file tm-threads.c.

References THV_PAUSE, and TmThreadsUnsetFlag().

Referenced by TmThreadContinueDetectLoaderThreads(), and TmThreadContinueThreads().

Here is the call graph for this function:

Here is the caller graph for this function:

void TmThreadContinueThreads ( void  )

Unpauses all threads present in tv_root.

Definition at line 1995 of file tm-threads.c.

References ThreadVars_::next, SCMutexLock, SCMutexUnlock, TmThreadContinue(), tv_root_lock, and TVT_MAX.

Referenced by main(), and RunModeUnixSocketGetDefaultMode().

Here is the call graph for this function:

Here is the caller graph for this function:

uint32_t TmThreadCountThreadsByTmmFlags ( uint8_t  flags)

returns a count of all the threads that match the flag

Definition at line 2183 of file tm-threads.c.

References ThreadVars_::next, SCMutexLock, SCMutexUnlock, ThreadVars_::tmm_flags, tv_root_lock, and TVT_MAX.

Referenced by PacketPoolPostRunmodes().

Here is the caller graph for this function:

ThreadVars* TmThreadCreate ( const char *  name,
const char *  inq_name,
const char *  inqh_name,
const char *  outq_name,
const char *  outqh_name,
const char *  slots,
void *(*)(void *)  fn_p,
int  mucond 
)

Creates and returns the TV instance for a new thread.

Parameters
nameName of this TV instance
inq_nameIncoming queue name
inqh_nameIncoming queue handler name as set by TmqhSetup()
outq_nameOutgoing queue name
outqh_nameOutgoing queue handler as set by TmqhSetup()
slotsString representation for the slot function to be used
fn_pPointer to function when "slots" is of type "custom"
mucondFlag to indicate whether to initialize the condition and the mutex variables for this newly created TV.
Return values
thenewly created TV instance, or NULL on error

Definition at line 1104 of file tm-threads.c.

References Tmqh_::InHandler, ThreadVars_::inq, Tmqh_::InShutdownHandler, ThreadVars_::InShutdownHandler, StatsPublicThreadContext_::m, Tmqh_::name, ThreadVars_::name, ThreadVars_::outctx, Tmqh_::OutHandler, Tmqh_::OutHandlerCtxSetup, ThreadVars_::outq, ThreadVars_::outqh_name, ThreadVars_::perf_public_ctx, Tmq_::reader_cnt, SC_ATOMIC_INIT, SC_ERR_THREAD_CREATE, SCFree, SCLogDebug, SCLogError, SCMalloc, SCMutexInit, strlcpy(), THV_PAUSE, THV_USE, TM_ECODE_OK, TmqCreateQueue(), TmqGetQueueByName(), ThreadVars_::tmqh_in, ThreadVars_::tmqh_out, TmqhGetQueueHandlerByName(), TmThreadInitMC(), TmThreadsSetFlag(), unlikely, and Tmq_::writer_cnt.

Referenced by NapatechStartStats(), TmThreadCreateCmdThreadByName(), TmThreadCreateMgmtThread(), TmThreadCreateMgmtThreadByName(), and TmThreadCreatePacketHandler().

Here is the call graph for this function:

Here is the caller graph for this function:

ThreadVars* TmThreadCreateCmdThreadByName ( const char *  name,
const char *  module,
int  mucond 
)

Creates and returns the TV instance for a Command thread (CMD). This function supports only custom slot functions and hence a function pointer should be sent as an argument.

Parameters
nameName of this TV instance
moduleName of TmModule with COMMAND flag set.
mucondFlag to indicate whether to initialize the condition and the mutex variables for this newly created TV.
Return values
thenewly created TV instance, or NULL on error

Definition at line 1316 of file tm-threads.c.

References ThreadVars_::id, m, MANAGEMENT_CPU_SET, TmModuleGetByName(), TmSlotSetFuncAppend(), TmThreadCreate(), TmThreadSetCPU(), TmThreadsRegisterThread(), TVT_CMD, and ThreadVars_::type.

Referenced by DetectLoaderThreadSpawn().

Here is the call graph for this function:

Here is the caller graph for this function:

ThreadVars* TmThreadCreateMgmtThread ( const char *  name,
void *  fn_p)(void *,
int  mucond 
)

Creates and returns the TV instance for a Management thread(MGMT). This function supports only custom slot functions and hence a function pointer should be sent as an argument.

Parameters
nameName of this TV instance
fn_pPointer to function when "slots" is of type "custom"
mucondFlag to indicate whether to initialize the condition and the mutex variables for this newly created TV.
Return values
thenewly created TV instance, or NULL on error

Definition at line 1255 of file tm-threads.c.

References ThreadVars_::id, MANAGEMENT_CPU_SET, TmThreadCreate(), TmThreadSetCPU(), TmThreadsRegisterThread(), TVT_MGMT, and ThreadVars_::type.

Referenced by StatsSpawnThreads().

Here is the call graph for this function:

Here is the caller graph for this function:

ThreadVars* TmThreadCreateMgmtThreadByName ( const char *  name,
const char *  module,
int  mucond 
)

Creates and returns the TV instance for a Management thread(MGMT). This function supports only custom slot functions and hence a function pointer should be sent as an argument.

Parameters
nameName of this TV instance
moduleName of TmModule with MANAGEMENT flag set.
mucondFlag to indicate whether to initialize the condition and the mutex variables for this newly created TV.
Return values
thenewly created TV instance, or NULL on error

Definition at line 1283 of file tm-threads.c.

References ThreadVars_::id, m, MANAGEMENT_CPU_SET, TmModuleGetByName(), TmSlotSetFuncAppend(), TmThreadCreate(), TmThreadSetCPU(), TmThreadsRegisterThread(), TVT_MGMT, and ThreadVars_::type.

Referenced by BypassedFlowManagerThreadSpawn(), FlowManagerThreadSpawn(), and FlowRecyclerThreadSpawn().

Here is the call graph for this function:

Here is the caller graph for this function:

ThreadVars* TmThreadCreatePacketHandler ( const char *  name,
const char *  inq_name,
const char *  inqh_name,
const char *  outq_name,
const char *  outqh_name,
const char *  slots 
)

Creates and returns a TV instance for a Packet Processing Thread. This function doesn't support custom slots, and hence shouldn't be supplied "custom" as its slot type. All PPT threads are created with a mucond(see TmThreadCreate declaration) of 0. Hence the tv conditional variables are not used to kill the thread.

Parameters
nameName of this TV instance
inq_nameIncoming queue name
inqh_nameIncoming queue handler name as set by TmqhSetup()
outq_nameOutgoing queue name
outqh_nameOutgoing queue handler as set by TmqhSetup()
slotsString representation for the slot function to be used
Return values
thenewly created TV instance, or NULL on error

Definition at line 1225 of file tm-threads.c.

References ThreadVars_::id, TmThreadCreate(), TmThreadsRegisterThread(), TVT_PPT, and ThreadVars_::type.

Referenced by RunModeErfFileAutoFp(), RunModeErfFileSingle(), RunModeFilePcapAutoFp(), RunModeFilePcapSingle(), RunModeSetIPSAutoFp(), RunModeSetIPSWorker(), and RunModeSetLiveCaptureAutoFp().

Here is the call graph for this function:

Here is the caller graph for this function:

void TmThreadDisablePacketThreads ( void  )

Disable all threads having the specified TMs.

Definition at line 1636 of file tm-threads.c.

References PacketQueue_::cond_q, FatalError, Tmq_::id, ThreadVars_::inq, PacketQueue_::len, Tmq_::name, ThreadVars_::name, ThreadVars_::next, Tmq_::reader_cnt, SC_ERR_FATAL, SCCondSignal, SCLogDebug, SCMutexLock, SCMutexUnlock, SleepMsec, THV_KILL, THV_RUNNING_DONE, TmThreadsCheckFlag(), TmThreadsSetFlag(), trans_q, tv_root_lock, TVT_PPT, and Tmq_::writer_cnt.

Referenced by PostRunDeinit().

Here is the call graph for this function:

Here is the caller graph for this function:

void TmThreadDisableReceiveThreads ( void  )

Disable all threads having the specified TMs.

Breaks out of the packet acquisition loop, and bumps into the 'flow loop', where it will process packets from the flow engine's shutdown handling.

Definition at line 1540 of file tm-threads.c.

References PacketQueue_::cond_q, FatalError, TmModule_::flags, Tmq_::id, ThreadVars_::inq, PacketQueue_::len, Tmq_::name, ThreadVars_::name, ThreadVars_::next, TmModule_::PktAcqBreakLoop, Tmq_::reader_cnt, SC_ATOMIC_GET, SC_ERR_FATAL, SCCondSignal, SCLogDebug, SCMutexLock, SCMutexUnlock, SleepMsec, TmSlot_::slot_next, THV_FLOW_LOOP, THV_KILL_PKTACQ, TM_FLAG_RECEIVE_TM, TmSlot_::tm_id, ThreadVars_::tm_slots, TmModuleGetById(), TmThreadsCheckFlag(), TmThreadsSetFlag(), trans_q, tv_root_lock, TVT_PPT, and Tmq_::writer_cnt.

Referenced by PostRunDeinit().

Here is the call graph for this function:

Here is the caller graph for this function:

TmSlot* TmThreadGetFirstTmSlotForPartialPattern ( const char *  tm_name)

Definition at line 1707 of file tm-threads.c.

References TmModule_::name, ThreadVars_::next, SCMutexLock, SCMutexUnlock, TmSlot_::slot_next, TmSlot_::tm_id, ThreadVars_::tm_slots, TmModuleGetById(), tv_root_lock, and TVT_PPT.

Here is the call graph for this function:

int TmThreadGetNbThreads ( uint8_t  type)
void TmThreadInitMC ( ThreadVars tv)

Sets the thread flags for a thread instance(tv)

Parameters
tvPointer to the thread instance for which the flag has to be set
flagsHolds the thread state this thread instance has to be set to Initializes the mutex and condition variables for this TV

It can be used by a thread to control a wait loop that can also be influenced by other threads.

Parameters
tvPointer to a TV instance

Definition at line 1904 of file tm-threads.c.

References ThreadVars_::ctrl_cond, ThreadVars_::ctrl_mutex, SC_ERR_FATAL, SCCtrlCondDestroy, SCCtrlCondInit, SCCtrlMutexDestroy, SCCtrlMutexInit, SCFree, SCLogError, and SCMalloc.

Referenced by TmThreadCreate().

Here is the caller graph for this function:

void TmThreadKillThreads ( void  )

Definition at line 1769 of file tm-threads.c.

References ThreadVars_::id, ThreadVars_::name, ThreadVars_::printable_name, SCFree, SCLogDebug, TmSlot_::slot_next, StatsThreadCleanup(), ThreadVars_::thread_group_name, ThreadVars_::tm_slots, TmThreadKillThreadsFamily(), TmThreadsUnregisterThread(), and TVT_MAX.

Referenced by main().

Here is the call graph for this function:

Here is the caller graph for this function:

void TmThreadKillThreadsFamily ( int  family)

Definition at line 1740 of file tm-threads.c.

References BUG_ON, MAX_WAIT_TIME, MIN, MIN_WAIT_TIME, ThreadVars_::next, SCMutexLock, SCMutexUnlock, SleepUsec, tv_root_lock, and TVT_MAX.

Referenced by PostRunDeinit(), and TmThreadKillThreads().

Here is the caller graph for this function:

void TmThreadPause ( ThreadVars tv)

Pauses a thread.

Parameters
tvPointer to a TV instance that has to be paused

Definition at line 2018 of file tm-threads.c.

References THV_PAUSE, and TmThreadsSetFlag().

Referenced by TmThreadPauseThreads().

Here is the call graph for this function:

Here is the caller graph for this function:

void TmThreadPauseThreads ( void  )

Pauses all threads present in tv_root.

Definition at line 2028 of file tm-threads.c.

References ThreadVars_::next, SCMutexLock, SCMutexUnlock, TmThreadPause(), TmThreadsListThreads(), tv_root_lock, and TVT_MAX.

Here is the call graph for this function:

void TmThreadRemove ( ThreadVars tv,
int  type 
)
int TmThreadsCheckFlag ( ThreadVars tv,
uint16_t  flag 
)
TmEcode TmThreadSetCPUAffinity ( ThreadVars tv,
uint16_t  cpu 
)

Set the thread options (cpu affinity).

Parameters
tvpointer to the ThreadVars to setup the affinity.
cpucpu on which affinity is set.
Return values
TM_ECODE_OK

Definition at line 1004 of file tm-threads.c.

References ThreadVars_::cpu_affinity, THREAD_SET_AFFINITY, ThreadVars_::thread_setup_flags, and TM_ECODE_OK.

Referenced by RunModeErfFileAutoFp().

Here is the caller graph for this function:

void TmThreadSetGroupName ( ThreadVars tv,
const char *  name 
)

Definition at line 1812 of file tm-threads.c.

References SC_ERR_RUNMODE, SCLogError, SCStrdup, ThreadVars_::thread_group_name, and unlikely.

Referenced by RunModeErfFileAutoFp(), RunModeFilePcapAutoFp(), RunModeSetIPSAutoFp(), and RunModeSetLiveCaptureAutoFp().

Here is the caller graph for this function:

void TmThreadSetPrio ( ThreadVars tv)

Adjusting nice value for threads.

Definition at line 968 of file tm-threads.c.

References ThreadVars_::name, SC_ERR_THREAD_NICE_PRIO, SCEnter, SCLogDebug, SCLogError, SCReturn, and ThreadVars_::thread_priority.

Referenced by TmThreadSetupOptions().

Here is the caller graph for this function:

TmEcode TmThreadSetThreadPriority ( ThreadVars tv,
int  prio 
)

Set the thread options (thread priority).

Parameters
tvPointer to the ThreadVars to setup the thread priority.
Return values
TM_ECODE_OK.

Definition at line 957 of file tm-threads.c.

References ThreadVars_::thread_priority, THREAD_SET_PRIORITY, ThreadVars_::thread_setup_flags, and TM_ECODE_OK.

Referenced by RunModeErfFileAutoFp().

Here is the caller graph for this function:

TmEcode TmThreadSetupOptions ( ThreadVars tv)

Set the thread options (cpu affinitythread). Priority should be already set by pthread_create.

Parameters
tvpointer to the ThreadVars of the calling thread.

Definition at line 1045 of file tm-threads.c.

References AffinityGetNextCPU(), ThreadVars_::cpu_affinity, ThreadsAffinityType_::cpu_set, EXCLUSIVE_AFFINITY, ThreadsAffinityType_::hiprio_cpu, ThreadsAffinityType_::lowprio_cpu, ThreadsAffinityType_::medprio_cpu, ThreadsAffinityType_::mode_flag, ThreadVars_::name, ThreadsAffinityType_::prio, PRIO_HIGH, PRIO_LOW, PRIO_MEDIUM, SCGetThreadIdLong, SCLogPerf, thread_affinity, ThreadVars_::thread_priority, THREAD_SET_AFFINITY, THREAD_SET_AFFTYPE, THREAD_SET_PRIORITY, ThreadVars_::thread_setup_flags, TM_ECODE_OK, and TmThreadSetPrio().

Referenced by StatsSetUI64(), and TmThreadsSlotVarRun().

Here is the call graph for this function:

Here is the caller graph for this function:

ThreadVars* TmThreadsGetCallingThread ( void  )

Returns the TV for the calling thread.

Return values
tvPointer to the ThreadVars instance for the calling thread; NULL on no match

Definition at line 2156 of file tm-threads.c.

References ThreadVars_::next, SCMutexLock, SCMutexUnlock, ThreadVars_::t, tv_root_lock, and TVT_MAX.

ThreadVars* TmThreadsGetTVContainingSlot ( TmSlot tm_slot)
int TmThreadsInjectPacketsById ( Packet **  packets,
const int  id 
)
Return values
r1 if packet was accepted, 0 otherwise
Note
if packet was not accepted, it's still the responsibility of the caller.

Definition at line 2370 of file tm-threads.c.

References PacketQueue_::cond_q, Tmq_::id, ThreadVars_::inq, PacketQueue_::mutex_q, PacketEnqueue(), SCCondSignal, SCMutexLock, SCMutexUnlock, ThreadVars_::stream_pq, Threads_::threads, Threads_::threads_size, trans_q, and Thread_::tv.

Referenced by FlowForceReassemblyForFlow().

Here is the call graph for this function:

Here is the caller graph for this function:

void TmThreadsListThreads ( void  )

Definition at line 2221 of file tm-threads.c.

References Thread_::in_use, Thread_::name, SCLogInfo, SCMutexLock, SCMutexUnlock, Threads_::threads, Threads_::threads_size, Thread_::tv, and Thread_::type.

Referenced by TmThreadPauseThreads().

Here is the caller graph for this function:

TmEcode TmThreadSpawn ( ThreadVars tv)
int TmThreadsRegisterThread ( ThreadVars tv,
const int  type 
)
void TmThreadsSetThreadTimestamp ( const int  id,
const struct timeval *  ts 
)

Definition at line 2318 of file tm-threads.c.

References SCMutexLock, SCMutexUnlock, Threads_::threads, Threads_::threads_size, Thread_::ts, and unlikely.

Referenced by TimeSetByThread().

Here is the caller graph for this function:

TmEcode TmThreadsSlotVarRun ( ThreadVars tv,
Packet p,
TmSlot slot 
)

Separate run function so we can call it recursively.

Todo:
Deal with post_pq for slots beyond the first.

Definition at line 116 of file tm-threads.c.

References BUG_ON, EngineDone(), Tmq_::id, TmSlot_::id, ThreadVars_::inq, PacketQueue_::len, len, likely, TmSlot_::Management, PacketQueue_::mutex_q, ThreadVars_::name, PACKET_PROFILING_TMM_END, PACKET_PROFILING_TMM_START, PacketDequeue(), PacketPoolDestroy(), PacketPoolInit(), PacketPoolInitEmpty(), TmSlot_::PktAcqLoop, SC_ATOMIC_GET, SC_ATOMIC_SET, SC_ERR_FATAL, SC_ERR_THREAD_INIT, SCDropCaps, SCLogDebug, SCLogError, SCLogNotice, SCLogWarning, SCMutexInit, SCMutexLock, SCMutexUnlock, SCSetThreadName, SleepUsec, TmSlot_::slot_initdata, TmSlot_::slot_next, TmSlot_::slot_post_pq, TmSlot_::slot_pre_pq, TmSlot_::SlotThreadDeinit, TmSlot_::SlotThreadExitPrintStats, TmSlot_::SlotThreadInit, StatsSetupPrivate(), StatsSyncCounters, ThreadVars_::stream_pq, suricata_ctl_flags, ThreadVars_::thread_setup_flags, THV_CLOSED, THV_DEINIT, THV_FAILED, THV_FLOW_LOOP, THV_INIT_DONE, THV_KILL, THV_KILL_PKTACQ, THV_PAUSE, THV_PAUSED, THV_RUNNING_DONE, TM_ECODE_DONE, TM_ECODE_FAILED, TM_ECODE_OK, ThreadVars_::tm_func, TmSlot_::tm_id, ThreadVars_::tm_slots, TMM_FLOWWORKER, ThreadVars_::tmqh_in, ThreadVars_::tmqh_out, TmqhOutputPacketpool(), TmqhReleasePacketsToPacketPool(), TmThreadsCheckFlag(), TmThreadSetupOptions(), TmThreadsSetFlag(), TmThreadsSlotVarRun(), TmThreadsUnsetFlag(), TmThreadTestThreadUnPaused(), TmThreadWaitForFlag(), PacketQueue_::top, trans_q, and unlikely.

Referenced by TmThreadsSlotVarRun().

Here is the call graph for this function:

Here is the caller graph for this function:

void TmThreadsUnregisterThread ( const int  id)

Definition at line 2285 of file tm-threads.c.

References Thread_::in_use, SCFree, SCMutexLock, SCMutexUnlock, Threads_::threads, Threads_::threads_cnt, and Threads_::threads_size.

Referenced by TmThreadKillThreads().

Here is the caller graph for this function:

void TmThreadsUnsetFlag ( ThreadVars tv,
uint16_t  flag 
)

Unset a thread flag.

Definition at line 106 of file tm-threads.c.

References SC_ATOMIC_AND.

Referenced by StatsSetUI64(), TmThreadContinue(), and TmThreadsSlotVarRun().

Here is the caller graph for this function:

void TmThreadTestThreadUnPaused ( ThreadVars tv)

Tests if the thread represented in the arg has been unpaused or not.

The function would return if the thread tv has been unpaused or if the kill flag for the thread has been set.

Parameters
tvPointer to the TV instance.

Definition at line 1953 of file tm-threads.c.

References SleepUsec, THV_KILL, THV_PAUSE, and TmThreadsCheckFlag().

Referenced by StatsSetUI64(), and TmThreadsSlotVarRun().

Here is the call graph for this function:

Here is the caller graph for this function:

void TmThreadWaitForFlag ( ThreadVars tv,
uint16_t  flags 
)

Waits till the specified flag(s) is(are) set. We don't bother if the kill flag has been set or not on the thread.

Parameters
tvPointer to the TV instance.

Definition at line 1971 of file tm-threads.c.

References SleepUsec, and TmThreadsCheckFlag().

Referenced by NapatechGetStreamConfig(), StatsSetUI64(), TmThreadSpawn(), and TmThreadsSlotVarRun().

Here is the call graph for this function:

Here is the caller graph for this function:

TmEcode TmThreadWaitOnThreadInit ( void  )

Used to check if all threads have finished their initialization. On finding an un-initialized thread, it waits till that thread completes its initialization, before proceeding to the next thread.

Return values
TM_ECODE_OKall initialized properly
TM_ECODE_FAILEDfailure

Definition at line 2079 of file tm-threads.c.

References ThreadVars_::name, ThreadVars_::next, SC_ATOMIC_GET, SC_ERR_THREAD_INIT, SCLogError, SCLogNotice, SCMutexLock, SCMutexUnlock, SleepUsec, THV_CLOSED, THV_DEAD, THV_FAILED, THV_INIT_DONE, TM_ECODE_FAILED, TM_ECODE_OK, TmThreadsCheckFlag(), tv_root_lock, TVT_MAX, TVT_MGMT, and TVT_PPT.

Referenced by main(), and RunModeUnixSocketGetDefaultMode().

Here is the call graph for this function:

Here is the caller graph for this function:

Variable Documentation