diff --git a/src/remote/remote_daemon.c b/src/remote/remote_daemon.c index f8082f62f6..2146655b0f 100644 --- a/src/remote/remote_daemon.c +++ b/src/remote/remote_daemon.c @@ -709,15 +709,8 @@ static void daemonShutdownHandler(virNetDaemonPtr dmn, virNetDaemonQuit(dmn); } -static void daemonReloadHandler(virNetDaemonPtr dmn ATTRIBUTE_UNUSED, - siginfo_t *sig ATTRIBUTE_UNUSED, - void *opaque ATTRIBUTE_UNUSED) +static void daemonReloadHandlerThread(void *opague ATTRIBUTE_UNUSED) { - if (!driversInitialized) { - VIR_WARN("Drivers are not initialized, reload ignored"); - return; - } - VIR_INFO("Reloading configuration on SIGHUP"); virHookCall(VIR_HOOK_DRIVER_DAEMON, "-", VIR_HOOK_DAEMON_OP_RELOAD, SIGHUP, "SIGHUP", NULL, NULL); @@ -725,6 +718,25 @@ static void daemonReloadHandler(virNetDaemonPtr dmn ATTRIBUTE_UNUSED, VIR_WARN("Error while reloading drivers"); } +static void daemonReloadHandler(virNetDaemonPtr dmn ATTRIBUTE_UNUSED, + siginfo_t *sig ATTRIBUTE_UNUSED, + void *opaque ATTRIBUTE_UNUSED) +{ + virThread thr; + + if (!driversInitialized) { + VIR_WARN("Drivers are not initialized, reload ignored"); + return; + } + + if (virThreadCreate(&thr, false, daemonReloadHandlerThread, NULL) < 0) { + /* + * Not much we can do on error here except log it. + */ + VIR_ERROR(_("Failed to create thread to handle daemon restart")); + } +} + static int daemonSetupSignals(virNetDaemonPtr dmn) { if (virNetDaemonAddSignalHandler(dmn, SIGINT, daemonShutdownHandler, NULL) < 0)