std::thread error
Jeff Webb
jeff.webb at nta-inc.net
Tue Sep 29 16:04:26 UTC 2015
On 09/29/2015 12:51 AM, Sebastian Huber wrote:
>
>
> On 28/09/15 23:52, Jeff Webb wrote:
>> To me, it looks like this:
>>
>> libgcov-interface.c includes gthr.h
>> gthr.h includes gthr-default.h.
>> gthr-default.h includes pthread.h
>> newlib/libc/include/pthread.h is found first, which does not include sched.h
>> after including pthread.h, gthr-default.h tries to reference sched_yield
>> i.e.: "__gthrw(sched_yield)"
>> gthr-default.h then includes sched.h later in the file.
>> sched.h defines sched_yield, but it is too late.
>>
>> Of course, I could easily be confused.
>
> The --enable-threads=posix is largely untested. I never used it myself. There is a probably a bug in the Newlib <pthread.h>, see also
>
> http://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread.h.html
>
> "Inclusion of the <pthread.h> header will make visible symbols defined in the headers <sched.h> and <time.h>."
>
Thanks for the pointer. I have made some progress. With the following change to newlib-cygwin.git, I was able to use the source builder to build the 4.11/rtems-arm tool suite with --enable-threads=posix.
$ git diff
diff --git a/newlib/libc/include/pthread.h b/newlib/libc/include/pthread.h
index db1f9c1..a5733d5 100644
--- a/newlib/libc/include/pthread.h
+++ b/newlib/libc/include/pthread.h
@@ -30,6 +30,7 @@ extern "C" {
#if defined(_POSIX_THREADS)
#include <sys/types.h>
+#include <sched.h>
#include <time.h>
#include <sys/sched.h>
#include <sys/cdefs.h>
I was then able to successfully rebuild RTEMS for the zedboard as I did before. I was also able to compile and run the POSIX examples in examples-v2, as before.
When compiling my own C++ test application I also discovered another issue in:
/opt/rtems/compiler/4.11/arm-rtems4.11/include/pthread.h
It looks like a const is omitted, when compared to my linux version:
int _EXFUN(pthread_setschedparam,
(pthread_t __pthread, int __policy, struct sched_param *__param));
The POSIX spec Sebastian referenced above seems to indicate that we need a const:
int pthread_setschedparam(pthread_t, int, const struct sched_param *);
After removing consts from my C++ code, I was able to get my sample application to compile. However, when I run it, I get this error message:
terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Not owner
Now I'm trying to track down the source of this error. Any ideas?
Thanks,
-Jeff
More information about the users
mailing list