public inbox for java@gcc.gnu.org
 help / color / mirror / Atom feed
* Usage of _Jv_AttachCurrentThread, _Jv_AttachCurrentThreadAsDaemon, _Jv_DetachCurrentThread.
@ 2013-04-09 18:17 Dave Korn
  2013-04-10  8:24 ` Andrew Haley
  2013-04-10  9:34 ` Bryce McKinlay
  0 siblings, 2 replies; 5+ messages in thread
From: Dave Korn @ 2013-04-09 18:17 UTC (permalink / raw)
  To: GCC Java

[ Please Cc: me in replies, I'm not subbed to java@ list. ]

    Hi Java list,

  Under what conditions would the thread attach/detach functions (from
libjava/java/lang/natThread.cc) listed in the title of this email be called?

  My motivation for asking this is because they call the _Jv_GCAttachThread
and _Jv_GCDetachThread thread functions in libjava/boehm.cc.  These functions
key off the existence of pthread_getattr_np on the host to call the boehm-gc
functions GC_register_my_thread and GC_unregister_my_thread like so:

> void
> _Jv_GCAttachThread ()
> {
>   // The registration interface is only defined on posixy systems and
>   // only actually works if pthread_getattr_np is defined.
>   // FIXME: until gc7 it is simpler to disable this on solaris.
> #if defined(HAVE_PTHREAD_GETATTR_NP) && !defined(GC_SOLARIS_THREADS)
>   GC_register_my_thread ();
> #endif
> }
> 
> void
> _Jv_GCDetachThread ()
> {
> #if defined(HAVE_PTHREAD_GETATTR_NP) && !defined(GC_SOLARIS_THREADS)
>   GC_unregister_my_thread ();
> #endif
> }

  Recent versions of the Cygwin DLL have added pthread_getattr_np, which
triggers the #if'd code to compile, but the win32/Cygwin thread support code
in boehm-gc doesn't implement these functions, so libjava fails to link.

  I could fix this by either adding a !defined(GC_WIN32_THREADS) in the same
way as Solaris disables these functions, or I could add an implementation of
the functions in boehm-gc for Cygwin, which is posixy and pthread-based.

  In order to decide which approach to take, I'd like to understand the
purpose of registering/deregistering an existing thread as opposed to catching
it on startup and exit via the pthread_create/pthread_join/thread_start
wrappers that already exist, hence my question about when and why the
functions in natThread.cc (which are the only users of the boehm.cc functions)
would be invoked.

  Also on the same topic, would there be any value added by providing Cygwin
implementations of GC_suspend_thread, GC_resume_thread and
GC_is_thread_suspended, which are called from _Jv_SuspendThread,
_JV_ResumeThread, _JV_IsThreadSuspended in boehm.cc and currently #if'd out by
a test on GC_WIN32_THREADS?

    cheers,
      DaveK

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2013-04-11  5:03 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-04-09 18:17 Usage of _Jv_AttachCurrentThread, _Jv_AttachCurrentThreadAsDaemon, _Jv_DetachCurrentThread Dave Korn
2013-04-10  8:24 ` Andrew Haley
2013-04-10  9:34 ` Bryce McKinlay
2013-04-10 23:18   ` Dave Korn
2013-04-11  5:03     ` Boehm, Hans

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).