]> prime8.dev >> repos - ttyd.git/commitdiff
protocol: fix incorrect uv_close usage
authorShuanglei Tao <tsl0922@gmail.com>
Sun, 27 Dec 2020 05:16:29 +0000 (13:16 +0800)
committerShuanglei Tao <tsl0922@gmail.com>
Sun, 27 Dec 2020 05:16:29 +0000 (13:16 +0800)
src/protocol.c
src/utils.h

index 1be0a4e07addb6d9d0846017a26d1d73d8fc7a62..038b4aaa92f5dc28694811c924900a50afcaa001 100644 (file)
@@ -87,9 +87,14 @@ static bool check_host_origin(struct lws *wsi) {
   return len > 0 && strcasecmp(buf, host_buf) == 0;
 }
 
+static void close_cb(uv_handle_t *handle) {
+  struct pty_proc *proc = container_of((uv_pipe_t *)handle, struct pty_proc, pipe);
+  free(proc);
+}
+
 static void pty_proc_free(struct pty_proc *proc) {
   uv_read_stop((uv_stream_t *)&proc->pipe);
-  uv_close((uv_handle_t *)&proc->pipe, NULL);
+  uv_close((uv_handle_t *)&proc->pipe, close_cb);
 
   close(proc->pty);
 
@@ -101,8 +106,6 @@ static void pty_proc_free(struct pty_proc *proc) {
   for (int i = 0; i < proc->argc; i++) {
     free(proc->args[i]);
   }
-
-  free(proc);
 }
 
 static void alloc_cb(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) {
index 935bec461f7176105da88716853e97f5c902e094..2060ac911bfb0c3d41295bb41bdf61bf9365bafd 100644 (file)
@@ -1,6 +1,12 @@
 #ifndef TTYD_UTIL_H
 #define TTYD_UTIL_H
 
+#define container_of(ptr, type, member)                \
+  ({                                                   \
+    const typeof(((type *)0)->member) *__mptr = (ptr); \
+    (type *)((char *)__mptr - offsetof(type, member)); \
+  })
+
 // malloc with NULL check
 void *xmalloc(size_t size);