@@ -22,7 +22,7 @@ do_delete(time_t backup_id)
2222int b_index ;
2323int ret ;
2424parray * backup_list ;
25- pgBackup * last_backup ;
25+ pgBackup * last_backup = NULL ;
2626
2727/* DATE are always required */
2828if (backup_id == 0 )
@@ -45,9 +45,7 @@ do_delete(time_t backup_id)
4545for (i = 0 ;i < parray_num (backup_list );i ++ )
4646{
4747last_backup = (pgBackup * )parray_get (backup_list ,i );
48- if (last_backup -> status == BACKUP_STATUS_OK &&
49- last_backup -> start_time == backup_id
50- )
48+ if (last_backup -> start_time == backup_id )
5149gotofound_backup ;
5250}
5351
@@ -62,15 +60,17 @@ do_delete(time_t backup_id)
6260/* just do it */
6361pgBackupDeleteFiles (last_backup );
6462
63+ if (last_backup -> status == BACKUP_STATUS_ERROR )
64+ return 0 ;
65+
6566/* remove all increments after removed backup */
6667for (i = b_index - 1 ;i >=0 ;i -- )
6768{
6869pgBackup * backup = (pgBackup * )parray_get (backup_list ,i );
6970if (backup -> backup_mode >=BACKUP_MODE_FULL )
7071break ;
71- if (backup -> status == BACKUP_STATUS_OK ||
72- backup -> backup_mode == BACKUP_MODE_DIFF_PAGE ||
73- backup -> backup_mode == BACKUP_MODE_DIFF_PTRACK
72+ if ((backup -> status == BACKUP_STATUS_OK || backup -> status == BACKUP_STATUS_CORRUPT )&&
73+ (backup -> backup_mode == BACKUP_MODE_DIFF_PAGE || backup -> backup_mode == BACKUP_MODE_DIFF_PTRACK )
7474)
7575pgBackupDeleteFiles (backup );
7676}