]> granicus.if.org Git - postgresql/commitdiff
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];