llvm_vfio_fuzz: handle thread create failure
In case of `pthread_create` or `spdk_thread_create` failed stop spdk app with `-1` error code Signed-off-by: Sebastian Brzezinka <sebastian.brzezinka@intel.com> Change-Id: Id5d0f6716917f42e06fbda7db9285deb320e309a Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16338 Reviewed-by: Ben Walker <benjamin.walker@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
943806efab
commit
c019eb4d67
@ -142,7 +142,7 @@ io_terminate(void *ctx)
|
|||||||
static void
|
static void
|
||||||
exit_handler(void)
|
exit_handler(void)
|
||||||
{
|
{
|
||||||
if (g_io_thread.io_ctrlr_path) {
|
if (g_io_thread.io_ctrlr_path && g_io_thread.thread) {
|
||||||
spdk_thread_send_msg(g_io_thread.thread, io_terminate, &g_io_thread);
|
spdk_thread_send_msg(g_io_thread.thread, io_terminate, &g_io_thread);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -392,6 +392,13 @@ init_io(void *ctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
g_io_thread.thread = spdk_thread_create("io_thread", NULL);
|
g_io_thread.thread = spdk_thread_create("io_thread", NULL);
|
||||||
|
if (g_io_thread.thread == NULL) {
|
||||||
|
fprintf(stderr, "cannot create io thread\n");
|
||||||
|
spdk_app_stop(-1);
|
||||||
|
pthread_kill(g_fuzz_td, SIGSEGV);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
spdk_thread_send_msg(g_io_thread.thread, start_io_poller, &g_io_thread);
|
spdk_thread_send_msg(g_io_thread.thread, start_io_poller, &g_io_thread);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -400,15 +407,25 @@ init_io(void *ctx)
|
|||||||
static void
|
static void
|
||||||
begin_fuzz(void *ctx)
|
begin_fuzz(void *ctx)
|
||||||
{
|
{
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
g_reactor_td = pthread_self();
|
g_reactor_td = pthread_self();
|
||||||
|
|
||||||
pthread_create(&g_fuzz_td, NULL, start_fuzzer, NULL);
|
rc = pthread_create(&g_fuzz_td, NULL, start_fuzzer, NULL);
|
||||||
|
if (rc != 0) {
|
||||||
|
spdk_app_stop(-1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* posix thread is use to avoid deadlock during spdk_nvme_connect
|
/* posix thread is use to avoid deadlock during spdk_nvme_connect
|
||||||
* vfio-user version negotiation may block when waiting for response
|
* vfio-user version negotiation may block when waiting for response
|
||||||
*/
|
*/
|
||||||
if (g_io_thread.io_ctrlr_path) {
|
if (g_io_thread.io_ctrlr_path) {
|
||||||
pthread_create(&g_io_thread.io_td, NULL, init_io, NULL);
|
rc = pthread_create(&g_io_thread.io_td, NULL, init_io, NULL);
|
||||||
|
if (rc != 0) {
|
||||||
|
spdk_app_stop(-1);
|
||||||
|
pthread_kill(g_fuzz_td, SIGSEGV);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user