[vlc-devel] [RFC v2 1/2] executor: introduce new executor API
Steve Lhomme
robux4 at ycbcr.xyz
Wed Sep 2 12:01:29 CEST 2020
On 2020-09-02 11:35, Alexandre Janniaux wrote:
> Hi,
>
> On Wed, Sep 02, 2020 at 11:09:35AM +0200, Romain Vimont wrote:
>> On Wed, Sep 02, 2020 at 10:34:28AM +0200, Romain Vimont wrote:
>>> On Wed, Sep 02, 2020 at 08:13:15AM +0200, Steve Lhomme wrote:
>>>> On 2020-09-01 18:13, Romain Vimont wrote:
>>>>> +
>>>>> +void
>>>>> +vlc_executor_Submit(vlc_executor_t *executor, struct vlc_runnable *runnable)
>>>>> +{
>>>>> + vlc_mutex_lock(&executor->lock);
>>>>> +
>>>>> + assert(!executor->closing);
>>>>
>>>> It might be legitimate to try to submit a task even if the executor is
>>>> closing. For example if a runnable is trying to submit another runnable. It
>>>> should have to check with some higher power if it's allowed to do so or not
>>>> (atomically). So at least you should just return here.
>>>
>>> In fact, just returning here will still cause problems: once submitted,
>>> a runnable is either canceled (with vlc_executor_Cancel() returning
>>> VLC_SUCCESS) or run (the run() callback is called).
>>>
>>> This allows the caller to know if the task is "finished" (so that it can
>>> safely delete its resources).
>>>
>>> If a _Submit() is ignored, then the runnable will not be canceled and
>>> will not be run, so resources will leak.
>>>
>>> I will think about it. I would like not to return a bool from _Submit()
I said "return", not "return a value". I don't think a return value is
needed. We do not have a "future" with the result of the task, otherwise
it would go there.
>>> just for that. I don't want to add a separate "deactivate" function for
>>> closing before _Delete(). Maybe the threads should continue to dequeue
>>> the pending tasks until the queue is empty in case a runnable queues
>>> another one after "closing"?
>>
>> In fact, I think it is reasonable to assert that the executor is not
>> closing. It is the caller responsibility to ensure that a runnable is
>> not submitted after it called vlc_executor_Delete().
>
> I agree, you don't want to Delete the executor while you still have
> pending tasks.
That means any runnable that want to launch another runnable will need
to check if the executor is not canceled. And yet if it's not canceled
it may submit a task when the executor just got canceled (by another
thread). And you will end up in this assert.
More information about the vlc-devel
mailing list