summaryrefslogtreecommitdiff
path: root/src/lib/dlt_filetransfer.c
diff options
context:
space:
mode:
authorAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>2011-09-29 15:24:54 +0200
committerAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>2011-09-29 15:24:54 +0200
commitc37ecb5031eebc36bfba8be0d741ec858e8898f7 (patch)
treef5ab98bf34fb9e70522386a8625d54425a6fb5d2 /src/lib/dlt_filetransfer.c
parent8fd55260f1d572939f185e014aef34a53b50de8b (diff)
downloadDLT-daemon-c37ecb5031eebc36bfba8be0d741ec858e8898f7.tar.gz
Fixed filetransfer to use shm status for flow control.
Added new function to dlt user library.
Diffstat (limited to 'src/lib/dlt_filetransfer.c')
-rw-r--r--src/lib/dlt_filetransfer.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/lib/dlt_filetransfer.c b/src/lib/dlt_filetransfer.c
index a78c418..935573d 100644
--- a/src/lib/dlt_filetransfer.c
+++ b/src/lib/dlt_filetransfer.c
@@ -95,14 +95,24 @@ int isFile (const char* file)
*/
void doTimeout(int timeout)
{
- if(timeout>MIN_TIMEOUT)
- {
- usleep(timeout * 1000);
- }
- else
+ int total_size, used_size;
+
+ dlt_user_check_buffer(&total_size, &used_size);
+
+ /* sleep only if more than 50% of buffer used */
+ if((total_size - used_size) < (total_size/2))
{
- usleep(MIN_TIMEOUT * 1000);
- }
+ printf("Wait %d of %d already used\n",used_size,total_size);
+
+ if(timeout>MIN_TIMEOUT)
+ {
+ usleep(timeout * 1000);
+ }
+ else
+ {
+ usleep(MIN_TIMEOUT * 1000);
+ }
+ }
}
//!Deletes the given file
@@ -298,8 +308,8 @@ int dlt_user_log_file_header(DltContext *fileContext,const char *filename){
*/
int dlt_user_log_file_data(DltContext *fileContext,const char *filename, int packageToTransfer, int timeout){
FILE *file;
- int i,pkgNumber;
- long positionIndicator,readBytes;
+ int pkgNumber;
+ long readBytes;
if(isFile(filename))
{