diff --git a/gthread/ChangeLog b/gthread/ChangeLog index 0adc49f76..4a35bfa12 100644 --- a/gthread/ChangeLog +++ b/gthread/ChangeLog @@ -3,6 +3,9 @@ * gthread-posix.c (g_thread_create_posix_impl): Use GError to report errors. + * gthread-solaris.c (g_thread_create_solaris_impl): Use GError to + report errors as well. + 2000-05-13 Tor Lillqvist * makefile.mingw.in: New file, with gthread stuff moved from diff --git a/gthread/gthread-posix.c b/gthread/gthread-posix.c index 4be752d68..5516a2964 100644 --- a/gthread/gthread-posix.c +++ b/gthread/gthread-posix.c @@ -287,13 +287,15 @@ g_thread_create_posix_impl (GThreadFunc thread_func, posix_check_for_error (pthread_attr_destroy (&attr)); - if (ret) + if (ret == EAGAIN) { g_set_error (error, G_THREAD_ERROR, G_THREAD_ERROR_AGAIN, "Error creating thread: %s", g_strerror (ret)); return; } + posix_check_for_error (ret); + #ifdef G_THREADS_IMPL_DCE if (!joinable) posix_check_for_error (pthread_detach (thread)); diff --git a/gthread/gthread-solaris.c b/gthread/gthread-solaris.c index c8d4302b9..7cf3c6ff0 100644 --- a/gthread/gthread-solaris.c +++ b/gthread/gthread-solaris.c @@ -195,18 +195,28 @@ g_thread_create_solaris_impl (GThreadFunc thread_func, gboolean joinable, gboolean bound, GThreadPriority priority, - gpointer thread) + gpointer thread, + GError **error) { long flags = (bound ? THR_BOUND : 0) | (joinable ? 0: THR_DETACHED); + gint ret; g_return_if_fail (thread_func); stack_size = MAX (g_thread_min_stack_size, stack_size); - solaris_check_for_error (thr_create (NULL, stack_size, - (void* (*)(void*))thread_func, - arg, flags, thread)); + ret = thr_create (NULL, stack_size, (void* (*)(void*))thread_func, + arg, flags, thread); + + if (ret == EAGAIN) + { + g_set_error (error, G_THREAD_ERROR, G_THREAD_ERROR_AGAIN, + "Error creating thread: %s", g_strerror (ret)); + return; + } + solaris_check_for_error (ret); + g_thread_set_priority_solaris_impl (thread, priority); }