Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
pg_upgrade: clarify C comment about Windows thread struct pointers
authorBruce Momjian <bruce@momjian.us>
Tue, 30 Jul 2013 13:23:31 +0000 (09:23 -0400)
committerBruce Momjian <bruce@momjian.us>
Tue, 30 Jul 2013 13:23:31 +0000 (09:23 -0400)
Backpatch to 9.3 to keep source trees consistent.

contrib/pg_upgrade/parallel.c

index 38ded518329cc6e714d4f62c4ece8c330f188baa..f00bb7181a734f5835103740fe5469964420638b 100644 (file)
@@ -130,7 +130,7 @@ parallel_exec_prog(const char *log_file, const char *opt_log_file,
            /* fork failed */
            pg_log(PG_FATAL, "could not create worker process: %s\n", strerror(errno));
 #else
-       /* use first empty array element */
+       /* empty array element are always at the end */
        new_arg = exec_thread_args[parallel_jobs - 1];
 
        /* Can only pass one pointer into the function, so use a struct */
@@ -244,7 +244,7 @@ parallel_transfer_all_new_dbs(DbInfoArr *old_db_arr, DbInfoArr *new_db_arr,
            /* fork failed */
            pg_log(PG_FATAL, "could not create worker process: %s\n", strerror(errno));
 #else
-       /* use first empty array element */
+       /* empty array element are always at the end */
        new_arg = transfer_thread_args[parallel_jobs - 1];
 
        /* Can only pass one pointer into the function, so use a struct */
@@ -339,10 +339,10 @@ reap_child(bool wait_for_child)
        thread_handles[thread_num] = thread_handles[parallel_jobs - 1];
 
        /*
-        * We must swap the arg struct pointers because the thread we just
-        * moved is active, and we must make sure it is not reused by the next
-        * created thread.  Instead, the new thread will use the arg struct of
-        * the thread that just died.
+        * Move last active thead arg struct into the now-dead slot,
+        * and the now-dead slot to the end for reuse by the next thread.
+        * Though the thread struct is in use by another thread, we can
+        * safely swap the struct pointers within the array.
         */
        tmp_args = cur_thread_args[thread_num];
        cur_thread_args[thread_num] = cur_thread_args[parallel_jobs - 1];