There's no locking around the lookup of a stream nor its shutdown
when issuing "shutdown sessions" over the CLI so the risk of crashing
the process is particularly high.
Let's use a thread_isolate() there which is suitable for this task, and
there are not that many alternatives.
This must be backported to 1.8.
(cherry picked from commit
3f5dd2945ccbed6b4baf23a453e9d1d071a2d835)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
ptr = (void *)strtoul(args[2], NULL, 0);
+ thread_isolate();
+
/* first, look for the requested stream in the stream table */
list_for_each_entry(strm, &streams, list) {
- if (strm == ptr)
+ if (strm == ptr) {
+ stream_shutdown(strm, SF_ERR_KILLED);
break;
+ }
}
+ thread_release();
+
/* do we have the stream ? */
if (strm != ptr)
return cli_err(appctx, "No such session (use 'show sess').\n");
- stream_shutdown(strm, SF_ERR_KILLED);
return 1;
}