Commit 0b6cff33 authored by unknown's avatar unknown
Browse files

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
Loading
Loading
Loading
Loading
+25 −20
Original line number Diff line number Diff line
@@ -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