[D-runtime] thread priority bug
Brad Roberts
braddr at puremagic.com
Sun Mar 17 16:49:41 PDT 2013
I just setup the freebsd64 tester to apply this (untested, though it
builds) patch to all builds it does. Hopefully that will help expose
what's going on. To be clear, the occasional failure is NOT freebsd or
even freebsd/64 specific, just seems to happen there a lot more
frequently than other platforms.
> diff --git a/src/core/stdc/string.d b/src/core/stdc/string.d
> index 32d36ca..6a9dd4b 100644
> --- a/src/core/stdc/string.d
> +++ b/src/core/stdc/string.d
> @@ -42,5 +42,6 @@ pure size_t strspn(in char* s1, in char* s2);
> pure char* strstr(in char* s1, in char* s2);
> char* strtok(char* s1, in char* s2);
> char* strerror(int errnum);
> +int strerror_r(int errnum, char* s1, size_t n);
> pure size_t strlen(in char* s);
> char* strdup(in char *s);
> diff --git a/src/core/thread.d b/src/core/thread.d
> index 5d9958a..2706a6a 100644
> --- a/src/core/thread.d
> +++ b/src/core/thread.d
> @@ -874,6 +874,8 @@ class Thread
> }
> else version( Posix )
> {
> + import core.stdc.string;
> +
> // NOTE: pthread_setschedprio is not implemented on linux, so use
> // the more complicated get/set sequence below.
> //if( pthread_setschedprio( m_addr, val ) )
> @@ -883,10 +885,18 @@ class Thread
> sched_param param;
>
> if( pthread_getschedparam( m_addr, &policy, ¶m ) )
> - throw new ThreadException( "Unable to set thread priority" );
> + {
> + char[1024] buf;
> + strerror_r(errno, buf.ptr, buf.sizeof);
> + throw new ThreadException( ("Unable to get sched param: " ~ buf).idup );
> + }
> param.sched_priority = val;
> if( pthread_setschedparam( m_addr, policy, ¶m ) )
> - throw new ThreadException( "Unable to set thread priority" );
> + {
> + char[1024] buf;
> + strerror_r(errno, buf.ptr, buf.sizeof);
> + throw new ThreadException( ("Unable to set sched param: " ~ buf).idup );
> + }
> }
> }
More information about the D-runtime
mailing list