diff options
author | Alexander Wenzel <Alexander.AW.Wenzel@bmw.de> | 2011-11-22 10:57:33 +0100 |
---|---|---|
committer | Alexander Wenzel <Alexander.AW.Wenzel@bmw.de> | 2011-11-22 10:57:33 +0100 |
commit | c8cd582507923a1f7ddcc05af47ea30a452e8c34 (patch) | |
tree | 0769d18dd9935f4228a32a6744707bc64d2331ad /src/system/dlt-system-log.c | |
parent | c870bcb94957fcbab7f56b6cd3ff5a0fc659f24c (diff) | |
download | DLT-daemon-c8cd582507923a1f7ddcc05af47ea30a452e8c34.tar.gz |
dlt-system filetransfer now recovers when file is deleted during filetransfer.
Added check of file size when starting and deleting files during filetransfer.
Added check of shm buffer availability when push to shm.
Diffstat (limited to 'src/system/dlt-system-log.c')
-rw-r--r-- | src/system/dlt-system-log.c | 51 |
1 files changed, 33 insertions, 18 deletions
diff --git a/src/system/dlt-system-log.c b/src/system/dlt-system-log.c index cf2b495..6c9f2bc 100644 --- a/src/system/dlt-system-log.c +++ b/src/system/dlt-system-log.c @@ -106,10 +106,16 @@ void dlt_system_filetransfer_run(DltSystemOptions *options,DltSystemRuntime *run if(runtime->filetransferRunning == 0) { /* delete last transmitted file */ if(runtime->filetransferFile[0]!=0) { - printf("Remove File: %s\n",runtime->filetransferFile); - if(remove(runtime->filetransferFile)) { - printf("Remove file %s failed!\n",runtime->filetransferFile); - return; + if(stat(runtime->filetransferFile,&status)==0) + { + if(runtime->filetransferFilesize == status.st_size) + { + /* delete file only if size is not changed since starting transfer */ + printf("Remove File: %s\n",runtime->filetransferFile); + if(remove(runtime->filetransferFile)) { + printf("Remove file %s failed!\n",runtime->filetransferFile); + } + } } runtime->filetransferFile[0]=0; } @@ -121,10 +127,13 @@ void dlt_system_filetransfer_run(DltSystemOptions *options,DltSystemRuntime *run while ((dp=readdir(dir)) != NULL) { if(strcmp(dp->d_name,".")!=0 && strcmp(dp->d_name,"..")!=0) { sprintf(filename,"%s/%s",options->FiletransferDirectory1,dp->d_name); - stat(filename,&status); - if(time_oldest == 0 || status.st_mtime < time_oldest) { - time_oldest = status.st_mtime; - strcpy(runtime->filetransferFile,filename); + if(stat(filename,&status)==0) + { + if((time_oldest == 0 || status.st_mtime < time_oldest) && (status.st_size != 0) ) { + time_oldest = status.st_mtime; + strcpy(runtime->filetransferFile,filename); + runtime->filetransferFilesize = status.st_size; + } } } } @@ -135,10 +144,13 @@ void dlt_system_filetransfer_run(DltSystemOptions *options,DltSystemRuntime *run while ((dp=readdir(dir)) != NULL) { if(strcmp(dp->d_name,".")!=0 && strcmp(dp->d_name,"..")!=0) { sprintf(filename,"%s/%s",options->FiletransferDirectory2,dp->d_name); - stat(filename,&status); - if(time_oldest == 0 || status.st_mtime < time_oldest) { - time_oldest = status.st_mtime; - strcpy(runtime->filetransferFile,filename); + if(stat(filename,&status)==0) + { + if((time_oldest == 0 || status.st_mtime < time_oldest) && (status.st_size != 0) ) { + time_oldest = status.st_mtime; + strcpy(runtime->filetransferFile,filename); + runtime->filetransferFilesize = status.st_size; + } } } } @@ -151,8 +163,10 @@ void dlt_system_filetransfer_run(DltSystemOptions *options,DltSystemRuntime *run runtime->filetransferCountPackages = dlt_user_log_file_packagesCount(context,runtime->filetransferFile); if(runtime->filetransferCountPackages < 0 ) { + /* a problem occured; stop filetransfer and continue with next file after timeout */ printf("Error: dlt_user_log_file_packagesCount\n"); runtime->filetransferCountPackages = 0; + runtime->filetransferRunning = 0; runtime->timeFiletransferDelay = options->FiletransferTimeDelay; return; } @@ -160,6 +174,7 @@ void dlt_system_filetransfer_run(DltSystemOptions *options,DltSystemRuntime *run transferResult = dlt_user_log_file_header(context,runtime->filetransferFile); if(transferResult < 0) { + /* a problem occured; stop filetransfer and continue with next file after timeout */ printf("Error: dlt_user_log_file_header\n"); runtime->filetransferCountPackages = 0; runtime->filetransferRunning = 0; @@ -178,7 +193,11 @@ void dlt_system_filetransfer_run(DltSystemOptions *options,DltSystemRuntime *run transferResult = dlt_user_log_file_data(context,runtime->filetransferFile,runtime->filetransferLastSentPackage,0); if(transferResult < 0) { + /* a problem occured; stop filetransfer and continue with next file after timeout */ printf("Error: dlt_user_log_file_data\n"); + runtime->filetransferCountPackages = 0; + runtime->filetransferRunning = 0; + runtime->timeFiletransferDelay = options->FiletransferTimeDelay; return; } /* wait sending next package if more than 50% of buffer used */ @@ -198,12 +217,8 @@ void dlt_system_filetransfer_run(DltSystemOptions *options,DltSystemRuntime *run } runtime->timeFiletransferDelay = options->FiletransferTimeDelay; runtime->filetransferRunning = 0; - } - - } - - - + } + } } void dlt_system_log_file(DltSystemOptions *options,DltContext *context,int num) { |