How can we extract mutex_control

Gedare Bloom gedare at rtems.org
Thu Aug 13 10:36:26 UTC 2015


On Thu, Aug 13, 2015 at 4:57 AM, Saurabh Gadia <gadia at usc.edu> wrote:
> For time being I am calculating it this way:
>
> #define typeaddr(addr, type, member) \
>   (type *)((char *)(addr) - offsetof(type, member))
>
If you need this, use RTEMS_CONTAINER_OF macro

> CORE_mutex_Control *the_mutex= typeaddr(holder->Wait.queue,
> CORE_mutex_Control, Wait_queue);
>
if holder is from the CORE_mutex_Control, you can use container-of on
it directly.

> Is there any other easy way? Like I guess we maintain objects so is there a
> way to get Object from its id. But its again convoluted problem - how to get
> id?
>
id are used from the upper APIs. they get converted into pointers by
_Objects_Get(). I don't know if that is what you want to do or not,
however.

It looks like you're in the right direction.

Gedare

> Thanks,
>
> Saurabh Gadia
>
> On Thu, Aug 13, 2015 at 12:20 AM, Saurabh Gadia <gadia at usc.edu> wrote:
>>
>> Hi,
>>
>> For a given thread waiting on a mutex, how can we extract the
>> mutex_control on which this thread is waiting? For example in
>> Thread_Change_priority(). So do the thread_control structure has any
>> reference to mutex on which it is blocked?
>>
>> Thanks,
>>
>> Saurabh Gadia
>
>



More information about the devel mailing list