virNetDaemonNewPostExecRestart;
virNetDaemonPreExecRestart;
virNetDaemonQuit;
+virNetDaemonQuitExecRestart;
virNetDaemonRemoveShutdownInhibition;
virNetDaemonRun;
virNetDaemonSetShutdownCallbacks;
bool quit;
bool finished;
bool graceful;
+ bool execRestart;
unsigned int autoShutdownTimeout;
size_t autoShutdownInhibitions;
virHashForEach(dmn->servers, daemonServerProcessClients, NULL);
+ /* don't shutdown services when performing an exec-restart */
+ if (dmn->quit && dmn->execRestart)
+ goto cleanup;
+
if (dmn->quit && dmn->finishTimer == -1) {
virHashForEach(dmn->servers, daemonServerClose, NULL);
if (dmn->shutdownPrepareCb && dmn->shutdownPrepareCb() < 0)
virObjectUnlock(dmn);
}
+
+void
+virNetDaemonQuitExecRestart(virNetDaemon *dmn)
+{
+ virObjectLock(dmn);
+
+ VIR_DEBUG("Exec-restart requested %p", dmn);
+ dmn->quit = true;
+ dmn->execRestart = true;
+
+ virObjectUnlock(dmn);
+}
+
+
static int
daemonServerClose(void *payload,
const char *key G_GNUC_UNUSED,
void virNetDaemonRun(virNetDaemonPtr dmn);
void virNetDaemonQuit(virNetDaemonPtr dmn);
+void virNetDaemonQuitExecRestart(virNetDaemon *dmn);
bool virNetDaemonHasClients(virNetDaemonPtr dmn);