Commit 0b6cff33 authored by unknown's avatar unknown

Cleanup of thread code (I didn't use conditionals earlier and I really should...

Cleanup of thread code (I didn't use conditionals earlier and I really should have, though there is technically no reason why the prior method would not work). This is just cleaner.
And this took under 10 minutes to change, so there is no wl or bug associated with it :)


client/mysqlimport.c:
  Rewrite of some earlier code (and one style cleanup).
parent b19c1896
......@@ -35,9 +35,10 @@
/* Global Thread counter */
int counter= 0;
int counter;
#ifdef HAVE_LIBPTHREAD
pthread_mutex_t counter_mutex;
pthread_cond_t count_threshhold;
#endif
static void db_error_with_table(MYSQL *mysql, char *table);
......@@ -556,6 +557,7 @@ pthread_handler_t worker_thread(void *arg)
pthread_mutex_lock(&counter_mutex);
counter--;
pthread_cond_signal(&count_threshhold);
pthread_mutex_unlock(&counter_mutex);
my_thread_end();
......@@ -584,28 +586,26 @@ int main(int argc, char **argv)
{
pthread_t mainthread; /* Thread descriptor */
pthread_attr_t attr; /* Thread attributes */
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,
PTHREAD_CREATE_DETACHED);
VOID(pthread_mutex_init(&counter_mutex, NULL));
VOID(pthread_cond_init(&count_threshhold, NULL));
for (; *argv != NULL; argv++) /* Loop through tables */
for (counter= 0; *argv != NULL; argv++) /* Loop through tables */
{
/*
If we hit thread count limit we loop until some threads exit.
We sleep for a second, so that we don't chew up a lot of
CPU in the loop.
*/
sanity_label:
if (counter == opt_use_threads)
pthread_mutex_lock(&counter_mutex);
while (counter == opt_use_threads)
{
sleep(1);
goto sanity_label;
struct timespec abstime;
set_timespec(abstime, 3);
pthread_cond_timedwait(&count_threshhold, &counter_mutex, &abstime);
}
pthread_mutex_lock(&counter_mutex);
/* Before exiting the lock we set ourselves up for the next thread */
counter++;
pthread_mutex_unlock(&counter_mutex);
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,
PTHREAD_CREATE_DETACHED);
/* now create the thread */
if (pthread_create(&mainthread, &attr, worker_thread,
(void *)*argv) != 0)
......@@ -621,13 +621,18 @@ int main(int argc, char **argv)
/*
We loop until we know that all children have cleaned up.
*/
loop_label:
if (counter)
pthread_mutex_lock(&counter_mutex);
while (counter)
{
sleep(1);
goto loop_label;
struct timespec abstime;
set_timespec(abstime, 3);
pthread_cond_timedwait(&count_threshhold, &counter_mutex, &abstime);
}
pthread_mutex_unlock(&counter_mutex);
VOID(pthread_mutex_destroy(&counter_mutex));
VOID(pthread_cond_destroy(&count_threshhold));
pthread_attr_destroy(&attr);
}
else
#endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment