[libvirt] PATCH: 18/25: Dynamic thread workers pool
Richard W.M. Jones
rjones at redhat.com
Fri Jan 16 12:10:35 UTC 2009
On Tue, Jan 13, 2009 at 05:46:08PM +0000, Daniel P. Berrange wrote:
> @@ -1948,6 +2000,26 @@ static int qemudRunLoop(struct qemud_ser
> }
> }
>
> + /* If number of active workers exceeds both the min_workers
> + * threshold and the number of clients, then kill some
> + * off */
> + for (i = 0 ; (i < server->nworkers &&
> + server->nactiveworkers > server->nclients &&
> + server->nactiveworkers > min_workers) ; i++) {
> +
> + if (server->workers[i].active &&
> + !server->workers[i].processing) {
> + server->workers[i].quit = 1;
> +
> + virCondBroadcast(&server->job);
> + virMutexUnlock(&server->lock);
> + pthread_join(server->workers[i].thread, NULL);
> + virMutexLock(&server->lock);
> + server->workers[i].active = 0;
> + server->nactiveworkers--;
> + }
> + }
> +
Doesn't this cause the main loop to hang -- eg. if we happen to try to
kill of a worker which is doing some lengthy operation?
> +struct qemud_worker {
> + pthread_t thread;
> + int active :1;
> + int processing :1;
> + int quit : 1;
I guess maybe I'm unclear about the meaning of these flags. What's
the difference between active & processing?
Rich.
--
Richard Jones, Emerging Technologies, Red Hat http://et.redhat.com/~rjones
Read my OCaml programming blog: http://camltastic.blogspot.com/
Fedora now supports 68 OCaml packages (the OPEN alternative to F#)
http://cocan.org/getting_started_with_ocaml_on_red_hat_and_fedora
More information about the libvir-list
mailing list