diff options
author | Christoph Lipka <clipka@jp.adit-jv.com> | 2016-11-07 15:26:35 +0900 |
---|---|---|
committer | Christoph Lipka <clipka@jp.adit-jv.com> | 2017-02-01 12:14:55 +0900 |
commit | 03dce720baf91ff67eb82431f8d6ad24b4f4d657 (patch) | |
tree | 90a7cb3ddfd1b2b36b908bf75b58bebe438d0554 /src/daemon/dlt_daemon_connection.c | |
parent | a961dba0013ed2119aa719546c63212459753549 (diff) | |
download | DLT-daemon-03dce720baf91ff67eb82431f8d6ad24b4f4d657.tar.gz |
Event handling: Fix connection destroy bug
It might happen that an event is part of the epoll event queue that
belongs to a connection which was destroyed before the event is handled.
Due to this, the event handling main loop might stop and the daemon
exits. This misbehavior is fixed with this patch.
Signed-off-by: Christoph Lipka <clipka@jp.adit-jv.com>
Diffstat (limited to 'src/daemon/dlt_daemon_connection.c')
-rw-r--r-- | src/daemon/dlt_daemon_connection.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/daemon/dlt_daemon_connection.c b/src/daemon/dlt_daemon_connection.c index 51f975d..b22f4b7 100644 --- a/src/daemon/dlt_daemon_connection.c +++ b/src/daemon/dlt_daemon_connection.c @@ -171,6 +171,7 @@ STATIC void dlt_connection_destroy_receiver(DltConnection *con) default: (void) dlt_receiver_free(con->receiver); free(con->receiver); + con->receiver = NULL; break; } } @@ -320,6 +321,9 @@ void dlt_connection_destroy(DltConnection *to_destroy) { close(to_destroy->receiver->fd); dlt_connection_destroy_receiver(to_destroy); + /* connection pointer might be in epoll queue and used even after destroying + * it. To make sure it is not used anymore, connection type is invalidated */ + to_destroy->type = DLT_CONNECTION_TYPE_MAX; free(to_destroy); } |