Fix client disconnection close 81/22181/1
authorJosé Bollo <jose.bollo@iot.bzh>
Tue, 20 Aug 2019 10:32:02 +0000 (12:32 +0200)
committerJosé Bollo <jose.bollo@iot.bzh>
Tue, 20 Aug 2019 10:34:30 +0000 (12:34 +0200)
Before that change, the client disconection made a loop
on read but wasn't closing the link.

Bug-AGL: SPEC-2759

Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Change-Id: Iecfbb95cb1b7079e695ff5c08155b2310bf4b8d8

src/afb-api-ws.c
src/afb-ws.c
src/afs-supervisor.c

index 6b242e1..72f4cec 100644 (file)
@@ -144,10 +144,10 @@ static void api_ws_server_listen_callback(void *closure, uint32_t revents, struc
 {
        struct api_ws_server *apiws = closure;
 
-       if ((revents & EPOLLIN) != 0)
-               api_ws_server_accept(apiws);
-       else if ((revents & EPOLLHUP) != 0)
+       if ((revents & EPOLLHUP) != 0)
                api_ws_server_connect(apiws);
+       else if ((revents & EPOLLIN) != 0)
+               api_ws_server_accept(apiws);
 }
 
 static void api_ws_server_disconnect(struct api_ws_server *apiws)
index fb31e4f..bb35c9d 100644 (file)
@@ -132,10 +132,10 @@ static void aws_disconnect(struct afb_ws *ws, int call_on_hangup)
 
 static void fdevcb(void *ws, uint32_t revents, struct fdev *fdev)
 {
-       if ((revents & EPOLLIN) != 0)
-               aws_on_readable(ws);
-       else if ((revents & EPOLLHUP) != 0)
+       if ((revents & EPOLLHUP) != 0)
                afb_ws_hangup(ws);
+       else if ((revents & EPOLLIN) != 0)
+               aws_on_readable(ws);
 }
 
 /*
index 2afbf53..d8d1910 100644 (file)
@@ -237,12 +237,12 @@ static void accept_supervision_link(int sock)
  */
 static void listening(void *closure, uint32_t revents, struct fdev *fdev)
 {
-       if ((revents & EPOLLIN) != 0)
-               accept_supervision_link((int)(intptr_t)closure);
-       else if ((revents & EPOLLHUP) != 0) {
+       if ((revents & EPOLLHUP) != 0) {
                ERROR("supervision socket closed");
                exit(1);
        }
+       if ((revents & EPOLLIN) != 0)
+               accept_supervision_link((int)(intptr_t)closure);
 }
 
 /*