Project homepage Mailing List  Warmcat.com  API Docs  Github Mirror 
{"schema":"libjg2-1", "vpath":"/git/", "avatar":"/git/avatar/", "alang":"", "gen_ut":1752652465, "reponame":"libwebsockets", "desc":"libwebsockets lightweight C networking library", "owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://libwebsockets.org/repo/libwebsockets", "f":3, "items": [ {"schema":"libjg2-1", "cid":"137bcb79eaa7ce4f70aa2a7bc9a3718b", "commit": {"type":"commit", "time": 1618031652, "time_ofs": 60, "oid_tree": { "oid": "c6fbf51f498acf96759a1e0607da6310e05ffd86", "alias": []}, "oid":{ "oid": "b28b03eee1a73c6215463e264bd355b2dfb39dae", "alias": []}, "msg": "smp: hold pt lock for lws_client_reset removing fds", "sig_commit": { "git_time": { "time": 1618031652, "offset": 60 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" }, "sig_author": { "git_time": { "time": 1617978186, "offset": 60 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" }}, "body": "smp: hold pt lock for lws_client_reset removing fds\n\nhttps://github.com/warmcat/libwebsockets/issues/2268\n" , "diff": "diff --git a/lib/core-net/pollfd.c b/lib/core-net/pollfd.c\nindex 4071160..80f445f 100644\n--- a/lib/core-net/pollfd.c\n+++ b/lib/core-net/pollfd.c\n@@ -351,6 +351,8 @@ __insert_wsi_socket_into_fds(struct lws_context *context, struct lws *wsi)\n \treturn ret;\n }\n \n+/* requires pt lock */\n+\n int\n __remove_wsi_socket_from_fds(struct lws *wsi)\n {\ndiff --git a/lib/roles/http/client/client-http.c b/lib/roles/http/client/client-http.c\nindex 925e119..8730ee6 100644\n--- a/lib/roles/http/client/client-http.c\n+++ b/lib/roles/http/client/client-http.c\n@@ -1525,6 +1525,7 @@ struct lws *\n lws_client_reset(struct lws **pwsi, int ssl, const char *address, int port,\n \t\t const char *path, const char *host, char weak)\n {\n+\tstruct lws_context_per_thread *pt;\n #if defined(LWS_ROLE_WS)\n \tstruct _lws_websocket_related *ws;\n #endif\n@@ -1537,6 +1538,7 @@ lws_client_reset(struct lws **pwsi, int ssl, const char *address, int port,\n \t\treturn NULL;\n \n \twsi \u003d *pwsi;\n+\tpt \u003d \u0026wsi-\u003ea.context-\u003ept[(int)wsi-\u003etsi];\n \n \tlwsl_debug(\u0022%s: %s: redir %d: %s\u005cn\u0022, __func__, lws_wsi_tag(wsi),\n \t\t\twsi-\u003eredirects, address);\n@@ -1608,7 +1610,10 @@ lws_client_reset(struct lws **pwsi, int ssl, const char *address, int port,\n \tlwsl_info(\u0022redirect ads\u003d'%s', port\u003d%d, path\u003d'%s', ssl \u003d %d, pifds %d\u005cn\u0022,\n \t\t address, port, path, ssl, wsi-\u003eposition_in_fds_table);\n \n+\tlws_pt_lock(pt, __func__);\n \t__remove_wsi_socket_from_fds(wsi);\n+\tlws_pt_unlock(pt);\n+\n #if defined(LWS_ROLE_WS)\n \tif (weak) {\n \t\tws \u003d wsi-\u003ews;\n","s":{"c":1752652465,"u": 2708}} ],"g": 3278,"chitpc": 0,"ehitpc": 0,"indexed":0 , "ab": 0, "si": 0, "db":0, "di":0, "sat":0, "lfc": "0000"}