From: Alexis Laferrière Date: Sat, 22 Nov 2014 02:31:14 +0000 (-0500) Subject: pthreads: move `cancel` related services to a new `extra` module X-Git-Tag: v0.6.11~21^2~3 X-Git-Url: http://nitlanguage.org pthreads: move `cancel` related services to a new `extra` module Signed-off-by: Alexis Laferrière --- diff --git a/lib/pthreads/extra.nit b/lib/pthreads/extra.nit new file mode 100644 index 0000000..94ea0e2 --- /dev/null +++ b/lib/pthreads/extra.nit @@ -0,0 +1,49 @@ +# This file is part of NIT (http://www.nitlanguage.org). +# +# Copyright 2014 Alexis Laferrière +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Offers some POSIX threads services that are not available on all platforms +module extra is + c_compiler_option("-pthread") + c_linker_option("-pthread") +end + +intrude import pthreads + +in "C" `{ + // TODO protect with: #ifdef WITH_LIBGC + #define GC_THREADS + #include + //#endif +`} + +redef extern class NativePthread + fun cancel: Bool `{ + return pthread_cancel(*recv); + `} +end + +redef class Thread + # Cancel the execution of the thread + fun cancel + do + if native == null then return + native.cancel + native = null + end +end + +# Does not return if the running thread is to be cancelled +fun test_cancel `{ pthread_testcancel(); `} diff --git a/lib/pthreads/pthreads.nit b/lib/pthreads/pthreads.nit index 1e76e28..047ebfd 100644 --- a/lib/pthreads/pthreads.nit +++ b/lib/pthreads/pthreads.nit @@ -114,10 +114,6 @@ private extern class NativePthread in "C" `{ pthread_t * `} return (nullable_Object)thread_return; `} - fun cancel: Bool `{ - return pthread_cancel(*recv); - `} - fun attr: NativePthreadAttr `{ pthread_attr_t *pattr = malloc(sizeof(pthread_attr_t)); pthread_getattr_np(*recv, pattr); @@ -272,14 +268,6 @@ abstract class Thread return r end - # Cancel the execution of the thread - fun cancel - do - if native == null then return - native.cancel - native = null - end - redef fun finalize do if native == null then return @@ -298,9 +286,6 @@ end # Exit current thread and return `value` to caller of `Thread::join` fun exit_thread(value: nullable Object) `{ pthread_exit(value); `} -# Does not return if the running thread is to be cancelled -fun test_cancel `{ pthread_testcancel(); `} - # Returns the handle to the running `Thread` fun thread: Thread do