Update thread creation and threads to use global thread names.

Thread name is now stored as a static string buffer,
string duplication and alloc/de-alloc is no longer required.
pull/2050/head
Zachary Rasmor 10 years ago committed by Victor Julien
parent 10d3d90f06
commit 68cfa009a0

@ -36,6 +36,7 @@
#include "util-privs.h" #include "util-privs.h"
#include "util-signal.h" #include "util-signal.h"
#include "unix-manager.h" #include "unix-manager.h"
#include "runmodes.h"
#include "output.h" #include "output.h"
#include "output-stats.h" #include "output-stats.h"
@ -843,7 +844,7 @@ void StatsSpawnThreads(void)
ThreadVars *tv_mgmt = NULL; ThreadVars *tv_mgmt = NULL;
/* spawn the stats wakeup thread */ /* spawn the stats wakeup thread */
tv_wakeup = TmThreadCreateMgmtThread("StatsWakeupThread", tv_wakeup = TmThreadCreateMgmtThread(thread_name_counter_wakeup,
StatsWakeupThread, 1); StatsWakeupThread, 1);
if (tv_wakeup == NULL) { if (tv_wakeup == NULL) {
SCLogError(SC_ERR_THREAD_CREATE, "TmThreadCreateMgmtThread " SCLogError(SC_ERR_THREAD_CREATE, "TmThreadCreateMgmtThread "
@ -858,7 +859,7 @@ void StatsSpawnThreads(void)
} }
/* spawn the stats mgmt thread */ /* spawn the stats mgmt thread */
tv_mgmt = TmThreadCreateMgmtThread("StatsMgmtThread", tv_mgmt = TmThreadCreateMgmtThread(thread_name_counter_stats,
StatsMgmtThread, 1); StatsMgmtThread, 1);
if (tv_mgmt == NULL) { if (tv_mgmt == NULL) {
SCLogError(SC_ERR_THREAD_CREATE, SCLogError(SC_ERR_THREAD_CREATE,

@ -26,6 +26,7 @@
#include "conf.h" #include "conf.h"
#include "debug.h" #include "debug.h"
#include "detect.h" #include "detect.h"
#include "runmodes.h"
#include "threads.h" #include "threads.h"
#include "threadvars.h" #include "threadvars.h"
#include "tm-threads.h" #include "tm-threads.h"
@ -267,10 +268,10 @@ void DetectLoaderThreadSpawn()
for (i = 0; i < num_loaders; i++) { for (i = 0; i < num_loaders; i++) {
ThreadVars *tv_loader = NULL; ThreadVars *tv_loader = NULL;
char name[32]; char name[TM_THREAD_NAME_MAX] = "";
snprintf(name, sizeof(name), "DetectLoader%02d", i+1); snprintf(name, sizeof(name), "%s#%02d", thread_name_detect_loader, i+1);
tv_loader = TmThreadCreateCmdThreadByName("DetectLoader", tv_loader = TmThreadCreateCmdThreadByName(name,
"DetectLoader", 1); "DetectLoader", 1);
BUG_ON(tv_loader == NULL); BUG_ON(tv_loader == NULL);

@ -738,10 +738,10 @@ void FlowManagerThreadSpawn()
{ {
ThreadVars *tv_flowmgr = NULL; ThreadVars *tv_flowmgr = NULL;
char name[32] = ""; char name[TM_THREAD_NAME_MAX] = "";
snprintf(name, sizeof(name), "%s#%02u", thread_name_flow_mgr, u+1); snprintf(name, sizeof(name), "%s#%02u", thread_name_flow_mgr, u+1);
tv_flowmgr = TmThreadCreateMgmtThreadByName(SCStrdup(name), tv_flowmgr = TmThreadCreateMgmtThreadByName(name,
"FlowManager", 0); "FlowManager", 0);
BUG_ON(tv_flowmgr == NULL); BUG_ON(tv_flowmgr == NULL);
@ -902,10 +902,10 @@ void FlowRecyclerThreadSpawn()
{ {
ThreadVars *tv_flowmgr = NULL; ThreadVars *tv_flowmgr = NULL;
char name[32] = ""; char name[TM_THREAD_NAME_MAX] = "";
snprintf(name, sizeof(name), "%s#%02u", thread_name_flow_rec, u+1); snprintf(name, sizeof(name), "%s#%02u", thread_name_flow_rec, u+1);
tv_flowmgr = TmThreadCreateMgmtThreadByName(SCStrdup(name), tv_flowmgr = TmThreadCreateMgmtThreadByName(name,
"FlowRecycler", 0); "FlowRecycler", 0);
BUG_ON(tv_flowmgr == NULL); BUG_ON(tv_flowmgr == NULL);

@ -71,7 +71,7 @@ int RunModeErfFileSingle(void)
/* Basically the same setup as PCAP files. */ /* Basically the same setup as PCAP files. */
ThreadVars *tv = TmThreadCreatePacketHandler("ErfFile", ThreadVars *tv = TmThreadCreatePacketHandler(thread_name_single,
"packetpool", "packetpool", "packetpool", "packetpool",
"packetpool", "packetpool", "packetpool", "packetpool",
"pktacqloop"); "pktacqloop");
@ -166,7 +166,7 @@ int RunModeErfFileAutoFp(void)
/* create the threads */ /* create the threads */
ThreadVars *tv = ThreadVars *tv =
TmThreadCreatePacketHandler("ReceiveErfFile", TmThreadCreatePacketHandler(thread_name_autofp,
"packetpool", "packetpool", "packetpool", "packetpool",
queues, "flow", queues, "flow",
"pktacqloop"); "pktacqloop");
@ -202,11 +202,13 @@ int RunModeErfFileAutoFp(void)
} }
for (thread = 0; thread < thread_max; thread++) { for (thread = 0; thread < thread_max; thread++) {
snprintf(tname, sizeof(tname), "Detect%d", thread+1); snprintf(tname, sizeof(tname), "%s#%02d", thread_name_workers, thread+1);
snprintf(qname, sizeof(qname), "pickup%d", thread+1); snprintf(qname, sizeof(qname), "pickup%d", thread+1);
SCLogDebug("tname %s, qname %s", tname, qname); SCLogDebug("tname %s, qname %s", tname, qname);
SCLogDebug("Assigning %s affinity to cpu %u", thread_name, cpu);
ThreadVars *tv_detect_ncpu = ThreadVars *tv_detect_ncpu =
TmThreadCreatePacketHandler(tname, TmThreadCreatePacketHandler(tname,
qname, "flow", qname, "flow",

@ -76,15 +76,8 @@ int RunModeFilePcapSingle(void)
snprintf(tname, sizeof(tname), "%s#01", thread_name_single); snprintf(tname, sizeof(tname), "%s#01", thread_name_single);
char *thread_name = SCStrdup(tname);
if (unlikely(thread_name == NULL))
{
SCLogError(SC_ERR_RUNMODE, "failed to strdup thread name");
exit(EXIT_FAILURE);
}
/* create the threads */ /* create the threads */
ThreadVars *tv = TmThreadCreatePacketHandler(thread_name, ThreadVars *tv = TmThreadCreatePacketHandler(tname,
"packetpool", "packetpool", "packetpool", "packetpool",
"packetpool", "packetpool", "packetpool", "packetpool",
"pktacqloop"); "pktacqloop");
@ -208,15 +201,9 @@ int RunModeFilePcapAutoFp(void)
snprintf(tname, sizeof(tname), "%s#01", thread_name_autofp); snprintf(tname, sizeof(tname), "%s#01", thread_name_autofp);
char *thread_name = SCStrdup(tname);
if (unlikely(thread_name == NULL)) {
SCLogError(SC_ERR_RUNMODE, "failed to strdup thread name");
exit(EXIT_FAILURE);
}
/* create the threads */ /* create the threads */
ThreadVars *tv_receivepcap = ThreadVars *tv_receivepcap =
TmThreadCreatePacketHandler(thread_name, TmThreadCreatePacketHandler(tname,
"packetpool", "packetpool", "packetpool", "packetpool",
queues, "flow", queues, "flow",
"pktacqloop"); "pktacqloop");
@ -252,13 +239,7 @@ int RunModeFilePcapAutoFp(void)
snprintf(qname, sizeof(qname), "pickup%d", thread+1); snprintf(qname, sizeof(qname), "pickup%d", thread+1);
SCLogDebug("tname %s, qname %s", tname, qname); SCLogDebug("tname %s, qname %s", tname, qname);
SCLogDebug("Assigning %s affinity to cpu %u", tname, cpu);
thread_name = SCStrdup(tname);
if (unlikely(thread_name == NULL)) {
SCLogError(SC_ERR_RUNMODE, "failed to strdup thread name");
exit(EXIT_FAILURE);
}
SCLogDebug("Assigning %s affinity to cpu %u", thread_name, cpu);
ThreadVars *tv_detect_ncpu = ThreadVars *tv_detect_ncpu =
TmThreadCreatePacketHandler(tname, TmThreadCreatePacketHandler(tname,

@ -213,7 +213,7 @@ int RunModeTileMpipeWorkers(void)
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
snprintf(tname, sizeof(tname), "Worker%d", pipe+1); snprintf(tname, sizeof(tname), "%s#%02d", thread_name_workers, pipe+1);
/* create the threads */ /* create the threads */
ThreadVars *tv_worker = ThreadVars *tv_worker =

@ -65,6 +65,10 @@ char *thread_name_workers = "W";
char *thread_name_verdict = "TX"; char *thread_name_verdict = "TX";
char *thread_name_flow_mgr = "FM"; char *thread_name_flow_mgr = "FM";
char *thread_name_flow_rec = "FR"; char *thread_name_flow_rec = "FR";
char *thread_name_unix_socket = "US";
char *thread_name_detect_loader = "DL";
char *thread_name_counter_stats = "CS";
char *thread_name_counter_wakeup = "CW";
/** /**
* \brief Holds description for a runmode. * \brief Holds description for a runmode.

@ -67,6 +67,10 @@ extern char *thread_name_workers;
extern char *thread_name_verdict; extern char *thread_name_verdict;
extern char *thread_name_flow_mgr; extern char *thread_name_flow_mgr;
extern char *thread_name_flow_rec; extern char *thread_name_flow_rec;
extern char *thread_name_unix_socket;
extern char *thread_name_detect_loader;
extern char *thread_name_counter_stats;
extern char *thread_name_counter_wakeup;
char *RunmodeGetActive(void); char *RunmodeGetActive(void);
const char *RunModeGetMainMode(void); const char *RunModeGetMainMode(void);

@ -994,7 +994,7 @@ void UnixManagerThreadSpawn(int mode)
SCCtrlCondInit(&unix_manager_ctrl_cond, NULL); SCCtrlCondInit(&unix_manager_ctrl_cond, NULL);
SCCtrlMutexInit(&unix_manager_ctrl_mutex, NULL); SCCtrlMutexInit(&unix_manager_ctrl_mutex, NULL);
tv_unixmgr = TmThreadCreateCmdThreadByName("UnixManagerThread", tv_unixmgr = TmThreadCreateCmdThreadByName(thread_name_unix_socket,
"UnixManager", 0); "UnixManager", 0);
if (tv_unixmgr == NULL) { if (tv_unixmgr == NULL) {

@ -148,11 +148,6 @@ int RunModeSetLiveCaptureAutoFp(ConfigIfaceParserFunc ConfigParser,
/* create the threads */ /* create the threads */
for (thread = 0; thread < threads_count; thread++) { for (thread = 0; thread < threads_count; thread++) {
snprintf(tname, sizeof(tname), "%s#%02d", thread_name, thread+1); snprintf(tname, sizeof(tname), "%s#%02d", thread_name, thread+1);
char *thread_name = SCStrdup(tname);
if (unlikely(thread_name == NULL)) {
SCLogError(SC_ERR_MEM_ALLOC, "Can't allocate thread name");
exit(EXIT_FAILURE);
}
ThreadVars *tv_receive = ThreadVars *tv_receive =
TmThreadCreatePacketHandler(tname, TmThreadCreatePacketHandler(tname,
"packetpool", "packetpool", "packetpool", "packetpool",
@ -220,11 +215,6 @@ int RunModeSetLiveCaptureAutoFp(ConfigIfaceParserFunc ConfigParser,
snprintf(tname, sizeof(tname), "%s#%02d-%s", thread_name, snprintf(tname, sizeof(tname), "%s#%02d-%s", thread_name,
thread+1, visual_devname); thread+1, visual_devname);
char *thread_name = SCStrdup(tname);
if (unlikely(thread_name == NULL)) {
SCLogError(SC_ERR_MEM_ALLOC, "Can't allocate thread name");
exit(EXIT_FAILURE);
}
ThreadVars *tv_receive = ThreadVars *tv_receive =
TmThreadCreatePacketHandler(tname, TmThreadCreatePacketHandler(tname,
"packetpool", "packetpool", "packetpool", "packetpool",
@ -333,7 +323,6 @@ static int RunModeSetLiveCaptureWorkersForDevice(ConfigIfaceThreadsCountFunc Mod
/* create the threads */ /* create the threads */
for (thread = 0; thread < threads_count; thread++) { for (thread = 0; thread < threads_count; thread++) {
char tname[TM_THREAD_NAME_MAX]; char tname[TM_THREAD_NAME_MAX];
char *n_thread_name = NULL;
char visual_devname[11] = ""; char visual_devname[11] = "";
int shortening_result; int shortening_result;
ThreadVars *tv = NULL; ThreadVars *tv = NULL;

Loading…
Cancel
Save