VIR_DEBUG("server=%p client=%p message=%p prog=%p",
srv, job->client, job->msg, job->prog);
+ if (!job->prog) {
+ if (virNetServerProgramUnknownError(job->client,
+ job->msg,
+ &job->msg->header) < 0)
+ goto error;
+ goto cleanup;
+ }
+
if (virNetServerProgramDispatch(job->prog,
srv,
job->client,
virNetServerLock(srv);
virNetServerProgramFree(job->prog);
virNetServerUnlock(srv);
+
+cleanup:
virNetServerClientFree(job->client);
VIR_FREE(job);
return;
}
}
- if (!prog) {
- virNetServerProgramUnknownError(client, msg, &msg->header);
- goto cleanup;
+ if (prog) {
+ virNetServerProgramRef(prog);
+ job->prog = prog;
+ priority = virNetServerProgramGetPriority(prog, msg->header.proc);
}
- virNetServerProgramRef(prog);
- job->prog = prog;
- priority = virNetServerProgramGetPriority(prog, msg->header.proc);
-
ret = virThreadPoolSendJob(srv->workers, priority, job);
-cleanup:
if (ret < 0) {
VIR_FREE(job);
virNetServerProgramFree(prog);