@@ -21,8 +21,6 @@ typedef struct
21
21
{
22
22
parray * files ;
23
23
pgBackup * backup ;
24
- unsignedint start_file_idx ;
25
- unsignedint end_file_idx ;
26
24
}restore_files_args ;
27
25
28
26
static void backup_online_files (bool re_recovery );
@@ -317,23 +315,22 @@ restore_database(pgBackup *backup)
317
315
if (num_threads < 1 )
318
316
num_threads = 1 ;
319
317
318
+ for (i = 0 ;i < parray_num (files );i ++ )
319
+ {
320
+ pgFile * file = (pgFile * )parray_get (files ,i );
321
+
322
+ __sync_lock_release (& file -> lock );
323
+ }
324
+
320
325
/* restore files into $PGDATA */
321
326
for (i = 0 ;i < num_threads ;i ++ )
322
327
{
323
328
restore_files_args * arg = pg_malloc (sizeof (restore_files_args ));
324
329
arg -> files = files ;
325
330
arg -> backup = backup ;
326
- arg -> start_file_idx = i * (parray_num (files )/num_threads );
327
- if (i == num_threads - 1 )
328
- arg -> end_file_idx = parray_num (files );
329
- else
330
- arg -> end_file_idx = (i + 1 )* (parray_num (files )/num_threads );
331
331
332
332
if (verbose )
333
- elog (WARNING ,"Start thread for start_file_idx:%i end_file_idx:%i num:%li" ,
334
- arg -> start_file_idx ,
335
- arg -> end_file_idx ,
336
- parray_num (files ));
333
+ elog (WARNING ,"Start thread for num:%li" ,parray_num (files ));
337
334
338
335
restore_threads_args [i ]= arg ;
339
336
pthread_create (& restore_threads [i ],NULL , (void * (* )(void * ))restore_files ,arg );
@@ -403,10 +400,12 @@ restore_files(void *arg)
403
400
restore_files_args * arguments = (restore_files_args * )arg ;
404
401
405
402
/* restore files into $PGDATA */
406
- for (i = arguments -> start_file_idx ;i < arguments -> end_file_idx ;i ++ )
403
+ for (i = 0 ;i < parray_num ( arguments -> files ) ;i ++ )
407
404
{
408
405
char from_root [MAXPGPATH ];
409
406
pgFile * file = (pgFile * )parray_get (arguments -> files ,i );
407
+ if (__sync_lock_test_and_set (& file -> lock ,1 )!= 0 )
408
+ continue ;
410
409
411
410
pgBackupGetPath (arguments -> backup ,from_root ,lengthof (from_root ),DATABASE_DIR );
412
411