summaryrefslogtreecommitdiff
path: root/client/mysqlimport.c
diff options
context:
space:
mode:
authorunknown <brian@zim.(none)>2006-06-13 17:59:04 -0700
committerunknown <brian@zim.(none)>2006-06-13 17:59:04 -0700
commit0b6cff33a25c0bdd14033d828e35fdfb36c431df (patch)
treeddce3e79ea0a70b35a620060c5c5f9148feae1b7 /client/mysqlimport.c
parentb19c1896adea1166adb8e80552ac3abfa7642205 (diff)
downloadmariadb-git-0b6cff33a25c0bdd14033d828e35fdfb36c431df.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 :) client/mysqlimport.c: Rewrite of some earlier code (and one style cleanup).
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