From owner-freebsd-java Mon Aug 27 9:54:46 2001 Delivered-To: freebsd-java@freebsd.org Received: from sharmas.dhs.org (cpe-66-1-147-119.ca.sprintbbd.net [66.1.147.119]) by hub.freebsd.org (Postfix) with ESMTP id 8B3D037B407 for ; Mon, 27 Aug 2001 09:54:42 -0700 (PDT) (envelope-from adsharma@sharmas.dhs.org) Received: by sharmas.dhs.org (Postfix, from userid 500) id 9F90D5E379; Mon, 27 Aug 2001 09:56:24 -0700 (PDT) Date: Mon, 27 Aug 2001 09:56:24 -0700 From: Arun Sharma To: Fuyuhiko Maruyama Cc: java@FreeBSD.ORG Subject: Re: JVM and native threads Message-ID: <20010827095624.B14875@sharmas.dhs.org> References: <20010824233304.A32099@sharmas.dhs.org> <55vgjcqv87.wl@tripper.private> <20010825095746.A1015@sharmas.dhs.org> <55heuv0xtl.wl@tripper.private> <20010826171010.A6742@gnuppy> <20010827143244.A12305@misty.eyesbeyond.com> <55k7zqnd1x.wl@tripper.private> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.15i In-Reply-To: <55k7zqnd1x.wl@tripper.private>; from fuyuhik8@is.titech.ac.jp on Mon, Aug 27, 2001 at 05:04:58PM +0900 Sender: owner-freebsd-java@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org On Mon, Aug 27, 2001 at 05:04:58PM +0900, Fuyuhiko Maruyama wrote: > What APIs are needed for ORP, Arun? How do you use NGPT for ORP? ORP was written for NT first and then ported to Linux. The approach they've taken is to emulate NT calls using the POSIX API: WaitForSingleObject CreateEvent See /os//os_wrapper.c However, the suspend and resume APIs haven't been implemented for POSIX platforms. #if defined(ORP_NT) #define SUSPEND_THREAD(orpthread) SuspendThread((orpthread)->thread_handle) #define RESUME_THREAD(orpthread) ResumeThread((orpthread)->thread_handle) #elif defined(ORP_POSIX) // Linux asserts if these are called, signal logic TBD inline DWORD _enum_bad_call(){assert(0); return 1;} #define SUSPEND_THREAD(orpthread) _enum_bad_call() #define RESUME_THREAD(orpthread) _enum_bad_call() [..] However, NGPT supports most of them just fine. But as Dave Butenholf would advise you, don't use suspend/resume unless you know what you're doing :) A quick look at the NGPT implementation indicates that a thread currently using the CPU (and possibly holding some locks), will not be suspended and the suspend call fails with EPERM. -Arun $ grep _np pthread.h extern int pthread_attr_setname_np __P((pthread_attr_t *, char *)); extern int pthread_attr_getname_np __P((pthread_attr_t *, char **)); extern int pthread_attr_setprio_np __P((pthread_attr_t *, int)); extern int pthread_attr_getprio_np __P((pthread_attr_t *, int *)); extern int pthread_attr_setweight_np __P((pthread_attr_t *, int)); /*ibm*/ extern int pthread_attr_setsuspendstate_np __P((pthread_attr_t *, int)); /*ibm*/ extern int pthread_attr_getsuspendstate_np __P((pthread_attr_t *, int *)); /*ibm*/ extern int pthread_yield_np __P((void)); extern int pthread_suspend_np __P((pthread_t)); /*ibm*/ extern int pthread_resume_np __P((pthread_t)); /*ibm*/ extern int pthread_getstacksize_np __P((pthread_t, int *)); /*ibm*/ extern void * pthread_getcontext_np __P((pthread_t)); /*ibm*/ extern int pthread_bindtonative_np __P((pthread_t)); /*ibm*/ #define sched_yield pthread_yield_np #define pthread_yield pthread_yield_np #define pthread_attr_setprio pthread_attr_setprio_np #define pthread_attr_getprio pthread_attr_getprio_np To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-java" in the body of the message