Add specific thread main function.

Earlier thread initialization was done in poll_waitevents(),
which was somewhat confusing, since the main thread also calls
into poll_waitevents().

Now there is a specific thread "main" function, which first
performs thread specific initialization and then calls into
poll_waitevents().
This commit is contained in:
Johan Wikman 2016-01-25 20:41:30 +02:00
parent 80cee351c4
commit 0b742977dd
2 changed files with 23 additions and 6 deletions

View File

@ -982,6 +982,28 @@ static void usage(void)
, progname);
}
/**
* The entry point of each worker thread.
*
* @param arg The thread argument.
*/
void worker_thread_main(void* arg)
{
/** Init mysql thread context for use with a mysql handle and a parser */
if (mysql_thread_init() == 0)
{
poll_waitevents(arg);
/** Release mysql thread context */
mysql_thread_end();
}
else
{
MXS_ERROR("Could not perform thread initialization for MySQL. Exiting thread.");
}
}
/**
* The main entry point into the gateway
*
@ -1920,7 +1942,7 @@ int main(int argc, char **argv)
*/
for (thread_id = 0; thread_id < n_threads - 1; thread_id++)
{
threads[thread_id] = thread_start(poll_waitevents, (void *)(thread_id + 1));
threads[thread_id] = thread_start(worker_thread_main, (void *)(thread_id + 1));
}
MXS_NOTICE("MaxScale started with %d server threads.", config_threadcount());
/**

View File

@ -546,9 +546,6 @@ poll_waitevents(void *arg)
thread_data[thread_id].state = THREAD_IDLE;
}
/** Init mysql thread context for use with a mysql handle and a parser */
mysql_thread_init();
while (1)
{
if (pollStats.evq_pending == 0 && timeout_bias < 10)
@ -732,8 +729,6 @@ poll_waitevents(void *arg)
thread_data[thread_id].state = THREAD_STOPPED;
}
bitmask_clear(&poll_mask, thread_id);
/** Release mysql thread context */
mysql_thread_end();
return;
}
if (thread_data)