qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH for-4.0 v9 14/16] qemu_thread: supplement error


From: fei
Subject: Re: [Qemu-devel] [PATCH for-4.0 v9 14/16] qemu_thread: supplement error handling for vnc_start_worker_thread
Date: Wed, 9 Jan 2019 00:24:00 +0800


> 在 2019年1月8日,01:54,Markus Armbruster <address@hidden> 写道:
> 
> Fei Li <address@hidden> writes:
> 
>> Supplement the error handling for vnc_thread_worker_thread: add
>> an Error parameter for it to propagate the error to its caller to
>> handle in case it fails, and make it return a Boolean to indicate
>> whether it succeeds.
>> 
>> Cc: Markus Armbruster <address@hidden>
>> Cc: Gerd Hoffmann <address@hidden>
>> Signed-off-by: Fei Li <address@hidden>
>> ---
>> ui/vnc-jobs.c | 17 +++++++++++------
>> ui/vnc-jobs.h |  2 +-
>> ui/vnc.c      |  4 +++-
>> 3 files changed, 15 insertions(+), 8 deletions(-)
>> 
>> diff --git a/ui/vnc-jobs.c b/ui/vnc-jobs.c
>> index 5712f1f501..35a652d1fd 100644
>> --- a/ui/vnc-jobs.c
>> +++ b/ui/vnc-jobs.c
>> @@ -332,16 +332,21 @@ static bool vnc_worker_thread_running(void)
>>     return queue; /* Check global queue */
>> }
>> 
>> -void vnc_start_worker_thread(void)
>> +bool vnc_start_worker_thread(Error **errp)
>> {
>>     VncJobQueue *q;
>> 
>> -    if (vnc_worker_thread_running())
>> -        return ;
>> +    if (vnc_worker_thread_running()) {
>> +        goto out;
> 
> Why not simply return true?
Sounds right.. Will remove the below “out:” too.

Have a nice day, thanks
Fei

> 
>> +    }
>> 
>>     q = vnc_queue_init();
>> -    /* TODO: let the further caller handle the error instead of abort() 
>> here */
>> -    qemu_thread_create(&q->thread, "vnc_worker", vnc_worker_thread,
>> -                       q, QEMU_THREAD_DETACHED, &error_abort);
>> +    if (!qemu_thread_create(&q->thread, "vnc_worker", vnc_worker_thread,
>> +                            q, QEMU_THREAD_DETACHED, errp)) {
>> +        vnc_queue_clear(q);
>> +        return false;
>> +    }
>>     queue = q; /* Set global queue */
>> +out:
>> +    return true;
>> }
>> diff --git a/ui/vnc-jobs.h b/ui/vnc-jobs.h
>> index 59f66bcc35..14640593db 100644
>> --- a/ui/vnc-jobs.h
>> +++ b/ui/vnc-jobs.h
>> @@ -37,7 +37,7 @@ void vnc_job_push(VncJob *job);
>> void vnc_jobs_join(VncState *vs);
>> 
>> void vnc_jobs_consume_buffer(VncState *vs);
>> -void vnc_start_worker_thread(void);
>> +bool vnc_start_worker_thread(Error **errp);
>> 
>> /* Locks */
>> static inline int vnc_trylock_display(VncDisplay *vd)
>> diff --git a/ui/vnc.c b/ui/vnc.c
>> index 0c1b477425..0ffe9e6a5d 100644
>> --- a/ui/vnc.c
>> +++ b/ui/vnc.c
>> @@ -3236,7 +3236,9 @@ void vnc_display_init(const char *id, Error **errp)
>>     vd->connections_limit = 32;
>> 
>>     qemu_mutex_init(&vd->mutex);
>> -    vnc_start_worker_thread();
>> +    if (!vnc_start_worker_thread(errp)) {
>> +        return;
>> +    }
>> 
>>     vd->dcl.ops = &dcl_ops;
>>     register_displaychangelistener(&vd->dcl);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]