Просмотр исходного кода

Merge pull request #3662 from BernardXiong/fix_pthreads

Fix pthreads
Bernard Xiong 5 лет назад
Родитель
Сommit
08a8e75ae9

+ 0 - 4
components/libc/compilers/newlib/syscalls.c

@@ -17,10 +17,6 @@
 #include <dfs_posix.h>
 #endif
 
-#ifdef RT_USING_PTHREADS
-#include <pthread.h>
-#endif
-
 #ifdef RT_USING_MODULE
 #include <dlmodule.h>
 #endif

+ 16 - 4
components/libc/pthreads/SConscript

@@ -1,10 +1,22 @@
 from building import *
+from utils import VersionCmp
 
-cwd = GetCurrentDir()
-src	= Glob('*.c')
-CPPPATH = [cwd]
+cwd        = GetCurrentDir()
+src        = Glob('*.c')
+CPPPATH    = [cwd]
+CPPDEFINES = []
+
+# only enable POSIX.1b-1993 Real-time extensions
+libc_ver   = GetDepend('LIBC_VERSION')
+try:
+    ver = libc_ver.split(' ')
+    ver = ver[1]
+    if VersionCmp(ver, "2.5.0") == 1:
+        CPPDEFINES = ['_POSIX_C_SOURCE=199309L']
+except :
+    pass
 
 group = DefineGroup('pthreads', src, 
-    depend = ['RT_USING_PTHREADS', 'RT_USING_LIBC'], CPPPATH = CPPPATH)
+    depend = ['RT_USING_PTHREADS', 'RT_USING_LIBC'], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
 
 Return('group')

+ 1 - 1
components/libc/pthreads/pthread.c

@@ -277,7 +277,7 @@ int pthread_create(pthread_t            *pid,
 
     /* set pthread cleanup function and ptd data */
     ptd->tid->cleanup = _pthread_cleanup;
-    ptd->tid->user_data = (rt_uint32_t)ptd;
+    ptd->tid->user_data = (rt_ubase_t)ptd;
 
     /* start thread */
     if (rt_thread_startup(ptd->tid) == RT_EOK)

+ 1 - 1
include/rtdef.h

@@ -623,7 +623,7 @@ struct rt_thread
     void        *lwp;
 #endif
 
-    rt_uint32_t user_data;                             /**< private user data beyond this thread */
+    rt_ubase_t user_data;                             /**< private user data beyond this thread */
 };
 typedef struct rt_thread *rt_thread_t;