[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 3/5] migration: Don't wait in semaphore for thread we know
From: |
Juan Quintela |
Subject: |
Re: [PATCH v3 3/5] migration: Don't wait in semaphore for thread we know has finished |
Date: |
Tue, 21 Jan 2020 12:10:11 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) |
"Dr. David Alan Gilbert" <address@hidden> wrote:
> * Juan Quintela (address@hidden) wrote:
>> If p->quit is true for any channel, we know that it has finished for
>> any reason. So don't wait for it, just continue.
>>
>> Signed-off-by: Juan Quintela <address@hidden>
>>
>> ---
>>
>> I could be convinced that the right thing to do in that case is to
>> just do a break instead of a continue. Each option has its own
>> advantages/disadvantanges.
>> ---
>> migration/ram.c | 6 ++++++
>> 1 file changed, 6 insertions(+)
>>
>> diff --git a/migration/ram.c b/migration/ram.c
>> index 44ca56e1ea..bc918ef28d 100644
>> --- a/migration/ram.c
>> +++ b/migration/ram.c
>> @@ -1118,6 +1118,12 @@ static void multifd_send_sync_main(RAMState *rs)
>> MultiFDSendParams *p = &multifd_send_state->params[i];
>>
>> trace_multifd_send_sync_main_wait(p->id);
>> + qemu_mutex_lock(&p->mutex);
>> + if (p->quit) {
>> + qemu_mutex_unlock(&p->mutex);
>> + continue;
>> + }
>> + qemu_mutex_unlock(&p->mutex);
>
> Why is this needed/helps?
> You can't depend on the p->quit happening before the
> sem_wait, so the main thread still has to do a post on sem_sync before
> the join, even with the addition of the check for p->quit.
if we have asked the thread to quit, it is inside posibility that it has
already quit, so it is not going to be able to do the ->post() for this
sem.
if ->quit == true, then we know that we are exiting. On _normal_ exit,
we know that everything is ok. On cancel/error, we don't really know,
it deppends how lucky we are.
Later, Juan.
- [PATCH v3 0/5] Fix multifd + cancel + multifd, Juan Quintela, 2020/01/16
- [PATCH v3 1/5] multifd: Make sure that we don't do any IO after an error, Juan Quintela, 2020/01/16
- [PATCH v3 2/5] migration: Create MigrationState active field, Juan Quintela, 2020/01/16
- [PATCH v3 3/5] migration: Don't wait in semaphore for thread we know has finished, Juan Quintela, 2020/01/16
- [PATCH v3 5/5] migration-test: Make sure that multifd and cancel works, Juan Quintela, 2020/01/16
- [PATCH v3 4/5] qemu-file: Don't do IO after shutdown, Juan Quintela, 2020/01/16