File tree Expand file tree Collapse file tree 2 files changed +7
-10
lines changed
Expand file tree Collapse file tree 2 files changed +7
-10
lines changed Original file line number Diff line number Diff line change @@ -315,6 +315,8 @@ do_backup_database(parray *backup_list, pgBackupOption bkupopt)
315315 {
316316 total_files_num ++ ;
317317 }
318+
319+ __sync_lock_release (& file -> lock );
318320 }
319321
320322 if (num_threads < 1 )
@@ -329,20 +331,12 @@ do_backup_database(parray *backup_list, pgBackupOption bkupopt)
329331 backup_files_args * arg = pg_malloc (sizeof (backup_files_args ));
330332 arg -> from_root = pgdata ;
331333 arg -> to_root = path ;
332- arg -> files = parray_new () ;
334+ arg -> files = backup_files_list ;
333335 arg -> prev_files = prev_files ;
334336 arg -> lsn = lsn ;
335337 backup_threads_args [i ] = arg ;
336338 }
337339
338- /* balance load between threads */
339- for (i = 0 ; i < parray_num (backup_files_list ); i ++ )
340- {
341- int cur_thread = i % num_threads ;
342- parray_append (backup_threads_args [cur_thread ]-> files ,
343- parray_get (backup_files_list , i ));
344- }
345-
346340 total_copy_files_increment = 0 ;
347341
348342 /* Run threads */
@@ -935,6 +929,8 @@ backup_files(void *arg)
935929 struct stat buf ;
936930
937931 pgFile * file = (pgFile * ) parray_get (arguments -> files , i );
932+ if (__sync_lock_test_and_set (& file -> lock , 1 ) != 0 )
933+ continue ;
938934
939935 /* If current time is rewinded, abort this backup. */
940936 if (tv .tv_sec < file -> mtime )
Original file line number Diff line number Diff line change @@ -56,11 +56,12 @@ typedef struct pgFile
5656 that the file existed but was not backed up
5757 because not modified since last backup. */
5858 pg_crc32 crc ; /* CRC value of the file, regular file only */
59- char * linked ; /* path of the linked file */
59+ char * linked ; /* path of the linked file */
6060 bool is_datafile ; /* true if the file is PostgreSQL data file */
6161 char * path ; /* path of the file */
6262 char * ptrack_path ;
6363 int segno ; /* Segment number for ptrack */
64+ volatile uint32 lock ;
6465 datapagemap_t pagemap ;
6566} pgFile ;
6667
You can’t perform that action at this time.
0 commit comments