From 5a02c9dbedb04f1c6a5bee4610a50cae55294b2d Mon Sep 17 00:00:00 2001 From: Alexander Alashkin <alexander.alashkin@cesanta.com> Date: Fri, 1 Apr 2016 13:09:50 +0100 Subject: [PATCH] Fix create and close conn for UDP. Closes cesanta/dev#3162 PUBLISHED_FROM=071fb54d90750143751c1badc52757f0ba90bdb5 --- mongoose.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/mongoose.c b/mongoose.c index 2e69976d7..bc6afca74 100644 --- a/mongoose.c +++ b/mongoose.c @@ -2328,7 +2328,7 @@ int mg_resolve(const char *host, char *buf, size_t n) { } #endif /* MG_DISABLE_SYNC_RESOLVER */ -MG_INTERNAL struct mg_connection *mg_create_connection( +MG_INTERNAL struct mg_connection *mg_create_connection_base( struct mg_mgr *mgr, mg_event_handler_t callback, struct mg_add_sock_opts opts) { struct mg_connection *conn; @@ -2346,13 +2346,22 @@ MG_INTERNAL struct mg_connection *mg_create_connection( * doesn't compile with pedantic ansi flags. */ conn->recv_mbuf_limit = ~0; - if (!mg_if_create_conn(conn)) { - MG_FREE(conn); - conn = NULL; - MG_SET_PTRPTR(opts.error_string, "failed init connection"); - } } else { - MG_SET_PTRPTR(opts.error_string, "failed create connection"); + MG_SET_PTRPTR(opts.error_string, "failed to create connection"); + } + + return conn; +} + +MG_INTERNAL struct mg_connection *mg_create_connection( + struct mg_mgr *mgr, mg_event_handler_t callback, + struct mg_add_sock_opts opts) { + struct mg_connection *conn = mg_create_connection_base(mgr, callback, opts); + + if (!mg_if_create_conn(conn)) { + MG_FREE(conn); + conn = NULL; + MG_SET_PTRPTR(opts.error_string, "failed to init connection"); } return conn; @@ -2694,7 +2703,8 @@ void mg_if_recv_udp_cb(struct mg_connection *nc, void *buf, int len, if (nc == NULL) { struct mg_add_sock_opts opts; memset(&opts, 0, sizeof(opts)); - nc = mg_create_connection(lc->mgr, lc->handler, opts); + /* Create fake connection w/out sock initialization */ + nc = mg_create_connection_base(lc->mgr, lc->handler, opts); if (nc != NULL) { nc->sock = lc->sock; nc->listener = lc; -- GitLab