I think you might need to do two passes if that’s straight-forward.  Then you 
can count, lock, allocate, unlock, read.

> On Apr 27, 2019, at 22:09 , Chris Johns <chr...@rtems.org> wrote:
> 
> On 27/4/19 10:23 pm, dufa...@hda.com wrote:
>> This is because RTL locks out heap operations.  For ELF
>> files /rtems_rtl_alloc_lock() /calls /rtem_rtl_alloc_heap() /and that
>> calls /_RTEMS_Lock_allocator()/ which locks the heap.  Then RTL calls /read()
>> /and the NFS threads try to use the heap. 
>> 
>> (gdb) up
>> #1  0x00135394 in rtems_rtl_alloc_lock ()
>>     at
>> /home/dufault/development/rtems/kernel/rtems/c/src/../../cpukit/libdl/rtl-allocator.c:119
>> 119    rtl->allocator.allocator (RTEMS_RTL_ALLOC_LOCK,
>> (gdb) print rtl->allocator.allocator
>> $469 = (rtems_rtl_allocator) 0x1357c5 <rtems_rtl_alloc_heap>
>> (gdb) 
> 
> Awesome investigation. I will take a look at the use of the allocator lock.
> 
> The lock is being held in an attempt to make sure the allocation of the text
> section and the veneers are as close as possible. The veneer needs to located 
> in
> a place where it can be reached.
> 
> If the allocator lock is being held and NFS is using it while being used then 
> we
> will deadlock.
> 
> Chris

Peter
-----------------
Peter Dufault
HD Associates, Inc.      Software and System Engineering

This email is delivered through the public internet using protocols subject to 
interception and tampering.

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to