Successful rtems_region_get_segment() returning NULL pointer ?
Rolf Schroedter
Rolf.Schroedter at dlr.de
Fri Sep 17 11:12:25 UTC 2004
Under which circumstances rtems_region_get_segment() returns a
RTEMS_SUCCESSFUL status together with a NULL pointer ?
My application has a writer task, obtaining segments of a large region
and sending (adr,size) pairs to a message queue.
A reader task reads the message queue, consumes the data and returns the
region segments.
I see two problems when the reader is slower than the writer and the
region fills up:
1. Sometimes the call to rtems_region_return_segment() never returns,
thus stalling the reader task.
2. Sometimes the writer call to rtems_region_get_segment() returns
a NULL pointer, with RTEMS_SUCCESSFUL status. (This seems to happen
only if the segment is filled up).
Unfortunately I'm not able to reproduce the problem with a simple
application. IMHO understanding 2. could be the key to understand 1.
The call to rtems_region_get_segment() is:
for(;;) {
stat=rtems_region_get_segment(idRegion,size,RTEMS_WAIT,100,&ptr);
if (stat == RTEMS_SUCCESSFUL) break;
waited++;
}
if(waited) printf("tm_write: Got segment after waiting: ptr=%p\n", ptr);
Any ideas are welcome.
Thanks & regards,
Rolf.
------------------------------------
Rolf Schroedter
German Aerospace Center
Institute of Planetary Research
D-12489 Berlin, Rutherfordstrasse 2
Tel/Fax: (+49) (30) 67055-416/384
Email: Rolf.Schroedter at dlr.de
More information about the users
mailing list