diff options
author | Christian Muck <christian.muck@bmw.de> | 2012-04-19 13:32:21 +0200 |
---|---|---|
committer | Christian Muck <christian.muck@bmw.de> | 2012-05-30 09:05:27 +0200 |
commit | 33de39a39c5838104d04d08e6eaff8ccb0d0f98d (patch) | |
tree | 14f8522b0c78d75e096509e16a5726fa3604a073 | |
parent | 3d2b2381d96db032b1498cd11e30dd6ec032f956 (diff) | |
download | DLT-daemon-33de39a39c5838104d04d08e6eaff8ccb0d0f98d.tar.gz |
[GDLT-85] Pipes opened multiple times for the same application pid fixed.
Signed-off-by: Christian Muck <christian.muck@bmw.de>
-rwxr-xr-x | src/daemon/dlt_daemon_common.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/daemon/dlt_daemon_common.c b/src/daemon/dlt_daemon_common.c index 2de511c..99bbabe 100755 --- a/src/daemon/dlt_daemon_common.c +++ b/src/daemon/dlt_daemon_common.c @@ -291,10 +291,18 @@ DltDaemonApplication* dlt_daemon_application_add(DltDaemon *daemon,char *apid,pi application = &(daemon->applications[daemon->num_applications-1]); dlt_set_id(application->apid,apid); + application->pid = pid; application->application_description = 0; application->num_contexts = 0; + application->user_handle = -1; new_application = 1; + + } else { + + snprintf(str,DLT_DAEMON_COMMON_TEXTBUFSIZE, "Duplicate registration of AppId: %s\n",apid); + dlt_log(LOG_ERR, str); + } /* Store application description and pid of application */ @@ -314,16 +322,28 @@ DltDaemonApplication* dlt_daemon_application_add(DltDaemon *daemon,char *apid,pi } } - application->pid = pid; - - application->user_handle = -1; + if( application->user_handle != -1 ) + { + if( application->pid != pid ) + { + if ( close(application->user_handle) < 0 ) + { + snprintf(str,DLT_DAEMON_COMMON_TEXTBUFSIZE, "close() failed to %s, errno=%d (%s)!\n",filename,errno,strerror(errno)); /* errno 2: ENOENT - No such file or directory */ + dlt_log(LOG_ERR, str); + } + + application->user_handle = -1; + application->pid = pid; + } + } - if (pid) + /* open user pipe only if it is not yet opened */ + if (application->user_handle==-1 && pid!=0) { sprintf(filename,"%s/dlt%d",DLT_USER_DIR,application->pid); dlt_user_handle = open(filename, O_WRONLY|O_NONBLOCK); - if (dlt_user_handle <0) + if ( dlt_user_handle < 0 ) { snprintf(str,DLT_DAEMON_COMMON_TEXTBUFSIZE, "open() failed to %s, errno=%d (%s)!\n",filename,errno,strerror(errno)); /* errno 2: ENOENT - No such file or directory */ dlt_log(LOG_ERR, str); |