summaryrefslogtreecommitdiff
path: root/client/mysqlimport.c
diff options
context:
space:
mode:
authorbrian@zim.(none) <>2006-06-13 17:59:04 -0700
committerbrian@zim.(none) <>2006-06-13 17:59:04 -0700
commitb977471e78cb32491e38a6cf227aef48f27d5a5e (patch)
treeddce3e79ea0a70b35a620060c5c5f9148feae1b7 /client/mysqlimport.c
parentd2b04770ac35f5b11684dfd8444129aacbd17f26 (diff)
downloadmariadb-git-b977471e78cb32491e38a6cf227aef48f27d5a5e.tar.gz
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 :)
Diffstat (limited to 'client/mysqlimport.c')
-rw-r--r--client/mysqlimport.c45
1 files changed, 25 insertions, 20 deletions
diff --git a/client/mysqlimport.c b/client/mysqlimport.c
index ccd6932e25b..18a31117c08 100644
--- a/client/mysqlimport.c
+++ b/client/mysqlimport.c
@@ -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 @@ error:
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 @@ sanity_label:
/*
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