From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <494672E2.1030903@domain.hid> Date: Mon, 15 Dec 2008 16:08:18 +0100 From: Jan Kiszka MIME-Version: 1.0 References: <20081215143435.15493.94798.stgit@domain.hid> <20081215143436.15493.65646.stgit@domain.hid> <49466DBF.9030403@domain.hid> <49466EA0.3070108@domain.hid> <4946715C.9080709@domain.hid> In-Reply-To: <4946715C.9080709@domain.hid> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Xenomai-core] [PATCH 3/6] POSIX: Optimize pthread_setschedparam fast path List-Id: "Xenomai life and development \(bug reports, patches, discussions\)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gilles Chanteperdrix Cc: xenomai@xenomai.org Gilles Chanteperdrix wrote: > Jan Kiszka wrote: >> diff --git a/src/skins/posix/thread.c b/src/skins/posix/thread.c >> index 2ecb64f..46c49bf 100644 >> --- a/src/skins/posix/thread.c >> +++ b/src/skins/posix/thread.c >> @@ -37,11 +37,10 @@ static int linuxthreads; >> int __wrap_pthread_setschedparam(pthread_t thread, >> int policy, const struct sched_param *param) >> { >> - pthread_t myself = pthread_self(); >> unsigned long *mode_buf = NULL; >> int err, promoted; >> >> - if (thread == myself) { >> + if (xeno_get_current() != XN_NO_HANDLE && thread == pthread_self()) { > > Should not this be xeno_get_current() == XN_NO_HANDLE ? The thread has a > chance to be promoted only if it is not already shadowed. Oh, hell. Friday-evening-on-the-train hack that hasn't been checked as it was so obvious... ---------> Optimize __wrap_pthread_setschedparam without HAVE___THREAD for the case that an already mapped shadow is modifying its own scheduling parameters. Signed-off-by: Jan Kiszka --- src/skins/posix/thread.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/src/skins/posix/thread.c b/src/skins/posix/thread.c index 2ecb64f..5e04082 100644 --- a/src/skins/posix/thread.c +++ b/src/skins/posix/thread.c @@ -37,11 +37,10 @@ static int linuxthreads; int __wrap_pthread_setschedparam(pthread_t thread, int policy, const struct sched_param *param) { - pthread_t myself = pthread_self(); unsigned long *mode_buf = NULL; int err, promoted; - if (thread == myself) { + if (xeno_get_current() == XN_NO_HANDLE && thread == pthread_self()) { #ifdef HAVE___THREAD mode_buf = xeno_init_current_mode(); #else /* !HAVE___THREAD */