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); , 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 * 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++) 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()); 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; 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) while (1)
{ {
if (pollStats.evq_pending == 0 && timeout_bias < 10) if (pollStats.evq_pending == 0 && timeout_bias < 10)
@ -732,8 +729,6 @@ poll_waitevents(void *arg)
thread_data[thread_id].state = THREAD_STOPPED; thread_data[thread_id].state = THREAD_STOPPED;
} }
bitmask_clear(&poll_mask, thread_id); bitmask_clear(&poll_mask, thread_id);
/** Release mysql thread context */
mysql_thread_end();
return; return;
} }
if (thread_data) if (thread_data)