lock order reversal etc.
Norbert Koch
nkoch at demig.de
Thu Sep 10 07:45:34 UTC 2009
John Baldwin schrieb:
> Try this patch for this one:
>
> Index: daemon_saver.c
> ===================================================================
> --- daemon_saver.c (revision 196974)
> +++ daemon_saver.c (working copy)
> @@ -351,11 +351,23 @@
> static int
> daemon_init(video_adapter_t *adp)
> {
> + size_t hostlen;
>
> mtx_lock(&prison0.pr_mtx);
> - messagelen = strlen(prison0.pr_hostname) + 3 + strlen(ostype) + 1 +
> - strlen(osrelease);
> - message = malloc(messagelen + 1, M_DEVBUF, M_WAITOK);
> + for (;;) {
> + hostlen = strlen(prison0.pr_hostname);
> + mtx_unlock(&prison0.pr_mtx);
> +
> + messagelen = hostlen + 3 + strlen(ostype) + 1 +
> + strlen(osrelease);
> + message = malloc(messagelen + 1, M_DEVBUF, M_WAITOK);
> + mtx_lock(&prison0.pr_mtx);
> + if (hostlen < strlen(prison0.pr_hostname)) {
> + free(message, M_DEVBUF);
> + continue;
> + }
> + break;
> + }
> sprintf(message, "%s - %s %s", prison0.pr_hostname, ostype, osrelease);
> mtx_unlock(&prison0.pr_mtx);
> blanked = 0;
>
That works for me. Thank you.
More information about the freebsd-current
mailing list