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 | |
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')
-rw-r--r-- | src/system/dlt-system-log.c | 51 | ||||
-rw-r--r-- | src/system/dlt-system.h | 1 |
2 files changed, 34 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) { diff --git a/src/system/dlt-system.h b/src/system/dlt-system.h index 0a4b7d5..8fca0ae 100644 --- a/src/system/dlt-system.h +++ b/src/system/dlt-system.h @@ -114,6 +114,7 @@ typedef struct { int timeStartup; /* time in seconds since startup of dlt-system */ int timeFiletransferDelay; /* time in seconds to start next filetransfer */ char filetransferFile[256]; + long int filetransferFilesize; int timeLogFileDelay[DLT_SYSTEM_LOG_FILE_MAX]; /* time in seconds to start next file log */ int timeLogProcessDelay[DLT_SYSTEM_LOG_PROCESSES_MAX]; /* time in seconds to start next process log */ int filetransferRunning; /* 0 = stooped, 1 = running */ |