--- pbx/pbx_spool.c.orig 2005-11-29 12:24:39.000000000 -0600 +++ pbx/pbx_spool.c 2006-01-18 17:34:59.582911005 -0600 @@ -279,7 +279,23 @@ } else { ast_log(LOG_NOTICE, "Call completed to %s/%s\n", o->tech, o->dest); ast_log(LOG_EVENT, "Queued call to %s/%s completed\n", o->tech, o->dest); - unlink(o->fn); + struct stat current_file_status; + int delete_call_file = 1; + if ( !stat(o->fn, ¤t_file_status) ) { + time_t end_time; + time(&end_time); + if ( end_time < current_file_status.st_atime ) { + ast_log(LOG_DEBUG, "call file stat date has changed to the future, keeping file\n"); + delete_call_file = 0; + } else { + ast_log(LOG_DEBUG, "deleting call file\n"); + } + } else { + ast_log(LOG_WARNING, "Unable to stat %s, possibly deleting a valid call file\n", o->fn); + } + if ( delete_call_file ) { + unlink(o->fn); + } } free_outgoing(o); return NULL;