<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Apr 13, 2021 at 8:02 AM Heinz Junkes <<a href="mailto:junkes@fhi-berlin.mpg.de">junkes@fhi-berlin.mpg.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Unfortunately I still do not understand it. Under Unix it runs perfectly and also the <br>
values are displayed correctly.<br>
<br>
In the debugger, the contents of the structure timespec are displayed correctly.<br>
<br>
Another point that probably makes the program hang:<br>
<br>
the function pthread_cond_timedwait(&cond, &mutex, &timeout) returns "1" and does not wait for the timeout.<br>
This return value should not exist at all?<br>
<br>
Under Unix, as expected, "110" is returned. ETIMOUT.<br></blockquote><div><br></div><div>What's your current version of the source?</div><div><br></div><div>--joel </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Heinz<br>
<br>
<br>
> On 12. Apr 2021, at 20:38, Gedare Bloom <<a href="mailto:gedare@rtems.org" target="_blank">gedare@rtems.org</a>> wrote:<br>
> <br>
> On Fri, Apr 9, 2021 at 11:45 AM Heinz Junkes <<a href="mailto:junkes@fhi-berlin.mpg.de" target="_blank">junkes@fhi-berlin.mpg.de</a>> wrote:<br>
>> <br>
>> Jiri, Joel, thanks for your answers.<br>
>> <br>
>> @Joel: I was wondering that rtems-examples in psx_example_3 does not wait 3 seconds.<br>
>> <br>
>> I made a curious observation:<br>
>> <br>
>> in the original code:<br>
>> <br>
>>   clock_gettime( CLOCK_REALTIME, &timeout );<br>
>>   timeout.tv_sec += 3;<br>
>>   timeout.tv_nsec = 0;<br>
>>   printf("The task is coming to enter in a timed wait\n");<br>
>>   pthread_cond_timedwait(&cond, &mutex, &timeout);<br>
>> <br>
>> <br>
>> I then inserted some printfs and found that the "3" is added to the nsec’s.<br>
>> <br>
>> Then I added the rtems-timespec-helpers routines, but get the same behavior:<br>
>> <br>
>> <br>
>> void * print_hello(void * arg)<br>
>> {<br>
>>  struct timespec now, timeout;<br>
>>  rtems_timespec_set(&timeout, 3, 0);<br>
>> <br>
>>  printf("<child>: Hello World! task with max priority \n");<br>
>>  clock_gettime( CLOCK_REALTIME, &now );<br>
>> printf("now tv_sec = %d, tv_nsec = %d\n", now.tv_sec, now.tv_nsec);<br>
>>  rtems_timespec_add_to(&timeout, &now);<br>
>> printf("timeout tv_sec = %d, tv_nsec = %d\n", timeout.tv_sec, timeout.tv_nsec);<br>
> <br>
> Please try with the appropriate type sizes and report back what you find.<br>
> <br>
> tv_sec is of type time_t<br>
> tv_nsec is of type long<br>
> <br>
> %d will only take 32b of those values, so you get some kind of garbage<br>
> (that can depend on endianness)<br>
> <br>
>>  printf("The task is coming to enter in a timed wait\n");<br>
>>  pthread_cond_timedwait(&cond, &mutex, &timeout);<br>
>>  printf("The task is coming out from the timed wait \n");<br>
>>  return NULL;<br>
>> }<br>
>> <br>
>> program output:<br>
>> <br>
>> <main> Enter in the main<br>
>> Creating first task<br>
>> <child>: Hello World! task with max priority<br>
>> now tv_sec = 4766459, tv_nsec = 567993600<br>
>> timeout tv_sec = 4766459, tv_nsec = 567993603<br>
>> The task is coming to enter in a timed wait<br>
>> The task is coming out from the timed wait<br>
>> First Task created<br>
>> Creating second task<br>
>> <child>: Hello World! Task with lowest priority Second task created<br>
>> <main> Out of the main<br>
>> <br>
>> If I now swap the arguments in the set-function , i.e. instead of<br>
>> rtems_timespec_set(&timeout, 3, 0);<br>
>> <br>
>> rtems_timespec_set(&timeout, 0, 3);<br>
>> <br>
>> it looks as it should<br>
>> <br>
>> <child>: Hello World! task with max priority<br>
>> now tv_sec = 10766729, tv_nsec = 567993600<br>
>> timeout tv_sec = 10766732, tv_nsec = 567993600<br>
>> The task is coming to enter in a timed wait<br>
>> The task is coming out from the timed wait<br>
>> First Task created<br>
>> Creating second task<br>
>> <child>: Hello World! Task with lowest priority Second task created<br>
>> <main> Out of the main<br>
>> <br>
>> But still no timed wait  recognizable :-(<br>
>> <br>
>> Heinz<br>
>> <br>
>> <br>
>> <br>
>> _______________________________________________<br>
>> users mailing list<br>
>> <a href="mailto:users@rtems.org" target="_blank">users@rtems.org</a><br>
>> <a href="http://lists.rtems.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/users</a><br>
<br>
_______________________________________________<br>
users mailing list<br>
<a href="mailto:users@rtems.org" target="_blank">users@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/users</a></blockquote></div></div>