Hi Manuel,
happy new year!
Being unable to accomplish `make test` on the December version of
bigloo4.3a, and seeing strange error messages, I went to check on...
api/srfi18/src/Posix/cthread.c
api/pthread/src/Posix/bglpthread.c
...and I believe those inappropriately use errno for reporting after
pthread_create. In contrast, pthread_join already gets it right. See
below for a patch to fix that.
(The test did succeed after increasing stack size limit beyond 6MB. No
idea why -- I am *not* building on Android/Darwin.)
Regards,
Robert
--- api/srfi18/src/Posix/cthread.c 2016-12-07 14:20:46.000000000 +0100
+++ api/srfi18/src/Posix/cthread.c 2017-01-03 15:09:50.682744744 +0100
@@ -83,6 +83,7 @@
/*---------------------------------------------------------------------*/
void
srfi18_thread_start( srfi18thread_t thread, obj_t bglthread, bool_t dt ) {
+ int createret;
pthread_attr_t a;
pthread_attr_init( &a );
@@ -91,8 +92,8 @@
bglpth_thread_env_create( thread, bglthread );
- if( pthread_create( &(thread->bglpthread.pthread), &a, srfi18_thread_run, thread ) )
+ if( createret = pthread_create( &(thread->bglpthread.pthread), &a, srfi18_thread_run, thread ) )
FAILURE( string_to_bstring( "thread-start!" ),
string_to_bstring( "Cannot start thread" ),
- string_to_bstring( strerror( errno ) ) );
+ string_to_bstring( strerror( createret ) ) );
}
--- api/pthread/src/Posix/bglpthread.c 2016-12-07 14:20:46.000000000 +0100
+++ api/pthread/src/Posix/bglpthread.c 2017-01-03 15:08:53.090747326 +0100
@@ -217,6 +217,7 @@
/*---------------------------------------------------------------------*/
void
bglpth_thread_start( bglpthread_t thread, obj_t bglthread, bool_t dt ) {
+ int createret;
pthread_attr_t a;
pthread_attr_init( &a );
@@ -238,10 +239,10 @@
bglpth_thread_env_create( thread, bglthread );
- if( pthread_create( &(thread->pthread), &a, bglpth_thread_run, thread ) )
+ if( createret = pthread_create( &(thread->pthread), &a, bglpth_thread_run, thread ) )
FAILURE( string_to_bstring( "thread-start!" ),
string_to_bstring( "Cannot start thread" ),
- string_to_bstring( strerror( errno ) ) );
+ string_to_bstring( strerror( createret ) ) );
}
/*---------------------------------------------------------------------*/