You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mynewt.apache.org by Christopher Collins <ch...@runtime.io> on 2017/07/25 22:30:56 UTC

Re: Changing eventq for a package

On Tue, Jul 25, 2017 at 03:20:46PM -0700, Vipul Rahane wrote:
> Hello,
> 
> While working on the sensors framework, I found a limitation which
> seems to be system wide and should be discussed before coming to a
> consensus.
> 
> By default all packages run on the default eventq. Generally,
> everybody uses the default eventq since that’s what initialization
> functions use which get called from sysinit via the package
> initialization functions. We have not seen many use cases where the
> app would like to change the eventq. If a developer would like to
> change the eventq he/she would have to modify the initialization
> function to do this. As we have it today, we allow setting eventqs in
> the app by exposing an API to set eventqs for a package. It is kind of
> bug prone as any timers initialized earlier would still keep using the
> old eventq.
> 
> I can think of three possible solutions to this problem:
> 
> 1. Reinitializing timers and resetting them in the evq_set()
> functions. 
> This solution however seems a bit counter intuitive as setting the
> eventq also resets the timers. 
> 
> 2. Allow reinitialization of modules so that initialization Vs
> re-initialization can be differentiated. This would make resetting
> timers explicit. 
> 
> Initialization generally does the following:
> - Initialize timers, callouts by setting the eventq
> - Create and Initialize mutexes 
> - Initialize module specific parameters(e.g.: Module Eventq, Base
> timestamps, etc)
> 
> Re-initialization would do the following:
> - Set module eventq
> - Re-initialize timers, callouts by stopping the timers, callouts and
> resetting them. 
> 
> IMO, 2. is the best solution.

I wouldn't be surprised if a lot more packages have this same problem.
Option 2 sounds good to me.  I presume each package's set-eventq
function would be removed from its public interface.  When the
application wants to move a package to a different task, it would call
the reinitialize function instead?

Chris

Re: Changing eventq for a package

Posted by Vipul Rahane <vi...@runtime.io>.
> On Jul 25, 2017, at 4:17 PM, will sanfilippo <wi...@runtime.io> wrote:
> 
> So this may not be the most educated or popular opinion, but why cant we do this via the newt tool and the .yml files in the apps/<myapp> directory? I do not see a use case for changing this dynamically (or should I say “run time”? Yeah, I know...) but I can definitely see a use case for wanting to change this based on the app.
> 
> I am generally not a fan of generated code but we do specify a package init function; could we not specify a package event queue function or something similar and override it in the app?

I see what you mean. It is a possible solution, but what would be required in this case is adding support to sysinit to take the eventq as a parameter without it being hardcoded, default being using the default eventq. I can see a use case for having a reinit but as you say I cannot see a use case where someone would want to change the eventq at runtime.

- Vipul

> 
> Will
> 
>> On Jul 25, 2017, at 4:04 PM, Vipul Rahane <vi...@runtime.io> wrote:
>> 
>> 
>>> On Jul 25, 2017, at 3:30 PM, Christopher Collins <ch...@runtime.io> wrote:
>>> 
>>> On Tue, Jul 25, 2017 at 03:20:46PM -0700, Vipul Rahane wrote:
>>>> Hello,
>>>> 
>>>> While working on the sensors framework, I found a limitation which
>>>> seems to be system wide and should be discussed before coming to a
>>>> consensus.
>>>> 
>>>> By default all packages run on the default eventq. Generally,
>>>> everybody uses the default eventq since that’s what initialization
>>>> functions use which get called from sysinit via the package
>>>> initialization functions. We have not seen many use cases where the
>>>> app would like to change the eventq. If a developer would like to
>>>> change the eventq he/she would have to modify the initialization
>>>> function to do this. As we have it today, we allow setting eventqs in
>>>> the app by exposing an API to set eventqs for a package. It is kind of
>>>> bug prone as any timers initialized earlier would still keep using the
>>>> old eventq.
>>>> 
>>>> I can think of three possible solutions to this problem:
>>>> 
>>>> 1. Reinitializing timers and resetting them in the evq_set()
>>>> functions. 
>>>> This solution however seems a bit counter intuitive as setting the
>>>> eventq also resets the timers. 
>>>> 
>>>> 2. Allow reinitialization of modules so that initialization Vs
>>>> re-initialization can be differentiated. This would make resetting
>>>> timers explicit. 
>>>> 
>>>> Initialization generally does the following:
>>>> - Initialize timers, callouts by setting the eventq
>>>> - Create and Initialize mutexes 
>>>> - Initialize module specific parameters(e.g.: Module Eventq, Base
>>>> timestamps, etc)
>>>> 
>>>> Re-initialization would do the following:
>>>> - Set module eventq
>>>> - Re-initialize timers, callouts by stopping the timers, callouts and
>>>> resetting them. 
>>>> 
>>>> IMO, 2. is the best solution.
>>> 
>>> I wouldn't be surprised if a lot more packages have this same problem.
>>> Option 2 sounds good to me.  I presume each package's set-eventq
>>> function would be removed from its public interface.  When the
>>> application wants to move a package to a different task, it would call
>>> the reinitialize function instead?
>> 
>> Yes, that would be the case.
>> 
>>> 
>>> Chris
>> 
> 


Re: Changing eventq for a package

Posted by will sanfilippo <wi...@runtime.io>.
So this may not be the most educated or popular opinion, but why cant we do this via the newt tool and the .yml files in the apps/<myapp> directory? I do not see a use case for changing this dynamically (or should I say “run time”? Yeah, I know...) but I can definitely see a use case for wanting to change this based on the app.

I am generally not a fan of generated code but we do specify a package init function; could we not specify a package event queue function or something similar and override it in the app?

Will

> On Jul 25, 2017, at 4:04 PM, Vipul Rahane <vi...@runtime.io> wrote:
> 
> 
>> On Jul 25, 2017, at 3:30 PM, Christopher Collins <ch...@runtime.io> wrote:
>> 
>> On Tue, Jul 25, 2017 at 03:20:46PM -0700, Vipul Rahane wrote:
>>> Hello,
>>> 
>>> While working on the sensors framework, I found a limitation which
>>> seems to be system wide and should be discussed before coming to a
>>> consensus.
>>> 
>>> By default all packages run on the default eventq. Generally,
>>> everybody uses the default eventq since that’s what initialization
>>> functions use which get called from sysinit via the package
>>> initialization functions. We have not seen many use cases where the
>>> app would like to change the eventq. If a developer would like to
>>> change the eventq he/she would have to modify the initialization
>>> function to do this. As we have it today, we allow setting eventqs in
>>> the app by exposing an API to set eventqs for a package. It is kind of
>>> bug prone as any timers initialized earlier would still keep using the
>>> old eventq.
>>> 
>>> I can think of three possible solutions to this problem:
>>> 
>>> 1. Reinitializing timers and resetting them in the evq_set()
>>> functions. 
>>> This solution however seems a bit counter intuitive as setting the
>>> eventq also resets the timers. 
>>> 
>>> 2. Allow reinitialization of modules so that initialization Vs
>>> re-initialization can be differentiated. This would make resetting
>>> timers explicit. 
>>> 
>>> Initialization generally does the following:
>>> - Initialize timers, callouts by setting the eventq
>>> - Create and Initialize mutexes 
>>> - Initialize module specific parameters(e.g.: Module Eventq, Base
>>> timestamps, etc)
>>> 
>>> Re-initialization would do the following:
>>> - Set module eventq
>>> - Re-initialize timers, callouts by stopping the timers, callouts and
>>> resetting them. 
>>> 
>>> IMO, 2. is the best solution.
>> 
>> I wouldn't be surprised if a lot more packages have this same problem.
>> Option 2 sounds good to me.  I presume each package's set-eventq
>> function would be removed from its public interface.  When the
>> application wants to move a package to a different task, it would call
>> the reinitialize function instead?
> 
> Yes, that would be the case.
> 
>> 
>> Chris
> 


Re: Changing eventq for a package

Posted by Vipul Rahane <vi...@runtime.io>.
> On Jul 25, 2017, at 3:30 PM, Christopher Collins <ch...@runtime.io> wrote:
> 
> On Tue, Jul 25, 2017 at 03:20:46PM -0700, Vipul Rahane wrote:
>> Hello,
>> 
>> While working on the sensors framework, I found a limitation which
>> seems to be system wide and should be discussed before coming to a
>> consensus.
>> 
>> By default all packages run on the default eventq. Generally,
>> everybody uses the default eventq since that’s what initialization
>> functions use which get called from sysinit via the package
>> initialization functions. We have not seen many use cases where the
>> app would like to change the eventq. If a developer would like to
>> change the eventq he/she would have to modify the initialization
>> function to do this. As we have it today, we allow setting eventqs in
>> the app by exposing an API to set eventqs for a package. It is kind of
>> bug prone as any timers initialized earlier would still keep using the
>> old eventq.
>> 
>> I can think of three possible solutions to this problem:
>> 
>> 1. Reinitializing timers and resetting them in the evq_set()
>> functions. 
>> This solution however seems a bit counter intuitive as setting the
>> eventq also resets the timers. 
>> 
>> 2. Allow reinitialization of modules so that initialization Vs
>> re-initialization can be differentiated. This would make resetting
>> timers explicit. 
>> 
>> Initialization generally does the following:
>> - Initialize timers, callouts by setting the eventq
>> - Create and Initialize mutexes 
>> - Initialize module specific parameters(e.g.: Module Eventq, Base
>> timestamps, etc)
>> 
>> Re-initialization would do the following:
>> - Set module eventq
>> - Re-initialize timers, callouts by stopping the timers, callouts and
>> resetting them. 
>> 
>> IMO, 2. is the best solution.
> 
> I wouldn't be surprised if a lot more packages have this same problem.
> Option 2 sounds good to me.  I presume each package's set-eventq
> function would be removed from its public interface.  When the
> application wants to move a package to a different task, it would call
> the reinitialize function instead?

Yes, that would be the case.

> 
> Chris