public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* libgcj/1124: _Jv_PthreadCheckMonitor test  is not portable.
@ 2000-12-20 12:06 charles.gauthier
  0 siblings, 0 replies; only message in thread
From: charles.gauthier @ 2000-12-20 12:06 UTC (permalink / raw)
  To: java-gnats

>Number:         1124
>Category:       libgcj
>Synopsis:       _Jv_PthreadCheckMonitor test  is not portable.
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    tromey
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Dec 20 12:06:19 PST 2000
>Closed-Date:    Thu Dec 09 09:10:39 PST 1999
>Last-Modified:  Thu Dec  9 09:16:00 PST 1999
>Originator:     charles.gauthier@iit.nrc.ca
>Release:        unknown-1.0
>Organization:
>Environment:
RTEMS, possibly Solaris
>Description:
On systems that do not support recursive mutexes,
pthread_mutex_trylock should not be expected to return 0 if
the caller already has locked the mutex. Unfortunately, it
may not return EDEADLK either.
>How-To-Repeat:
Startup of any application fails under RTEMS
with a java.lang.IllegalMonitorStateException exception when
calling _Jv_PrepareCompiledClass with the class that contains
the main method. Possibly the same under Solaris.
>Fix:
Partial fix is to check for a return value of EDEADLK and 
take it to mean that the caller already has locked the
mutex. Just return 0 in that case.
>Release-Note:

>Audit-Trail:

Formerly PR libgcj/117


From: Tom Tromey <tromey@cygnus.com>
To: charles.gauthier@iit.nrc.ca
Cc: java-gnats@sourceware.cygnus.com
Subject: Re: libgcj/117: _Jv_PthreadCheckMonitor test  is not portable.
Date: Wed, 8 Dec 1999 18:53:54 -0800 (PST)

 I apparently forgot about the no-recursive-mutexes case when writing
 this code.  Can you try this patch?  I haven't even tried compiling
 it... but if it fails, it at least gives the general idea of what to do.
 
 Index: include/posix-threads.h
 ===================================================================
 RCS file: /cvs/java/libgcj/libjava/include/posix-threads.h,v
 retrieving revision 1.9
 diff -u -r1.9 posix-threads.h
 --- posix-threads.h	1999/11/04 16:45:11	1.9
 +++ posix-threads.h	1999/12/09 02:51:30
 @@ -103,10 +103,13 @@
  inline int
  _Jv_PthreadCheckMonitor (_Jv_Mutex_t *mu)
  {
 -  pthread_mutex_t *pmu = _Jv_PthreadGetMutex (mu);
 +  pthread_mutex_t *pmu;
 +#ifdef HAVE_RECURSIVE_MUTEX
 +  pmu = _Jv_PthreadGetMutex (mu);
    // See if the mutex is locked by this thread.
    if (pthread_mutex_trylock (pmu))
      return 1;
 +
  #if defined (PTHREAD_MUTEX_HAVE_M_COUNT)
    // On Linux we exploit knowledge of the implementation.
    int r = pmu->m_count == 1;
 @@ -117,6 +120,17 @@
  #else
    int r = mu->count == 0;
  #endif
 +
 +#else /* HAVE_RECURSIVE_MUTEX */
 +  // In this case we must lock our structure and then see if this
 +  // thread owns the mutex.
 +  pmu = &mu->mutex;
 +  if (pthread_mutex_lock (pmu))
 +    return 0;
 +
 +  int r = mu->thread == pthread_self () && mu->count == 0;
 +#endif /* HAVE_RECURSIVE_MUTEX */
 +
    pthread_mutex_unlock (pmu);
    return r;
  }

From: tromey@sourceware.cygnus.com
To: java-gnats@sourceware.cygnus.com
Cc:  
Subject: libgcj/117
Date: 9 Dec 1999 16:57:27 -0000

 	* include/posix-threads.h (_Jv_PthreadCheckMonitor): Handle case
 	where no recursive mutexes exist.  Fixes PR libgcj/117.
State-Changed-From-To: open->closed
State-Changed-By: tromey
State-Changed-When: Thu Dec  9 09:10:39 1999
State-Changed-Why:
    I checked in a patch which ought to fix this problem.

From: tromey@cygnus.com
To: charles.gauthier@iit.nrc.ca, java-gnats@sourceware.cygnus.com,
  tromey@cygnus.com
Cc:  
Subject: Re: libgcj/117
Date: 9 Dec 1999 17:10:39 -0000

 Synopsis: _Jv_PthreadCheckMonitor test  is not portable.
 
 State-Changed-From-To: open->closed
 State-Changed-By: tromey
 State-Changed-When: Thu Dec  9 09:10:39 1999
 State-Changed-Why:
     I checked in a patch which ought to fix this problem.
 
 http://sourceware.cygnus.com/cgi-bin/gnatsweb.pl?cmd=view&pr=117&database=java
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="pthread_mutex_trylock_problem"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="pthread_mutex_trylock_problem"

RnJvbSAtIFdlZCBEZWMgIDggMjI6NDI6NDUgMTk5OQpYLU1vemlsbGEtU3RhdHVzOiAwMDAxClgt
TW96aWxsYS1TdGF0dXMyOiAwMDAwMDAwMApNZXNzYWdlLUlEOiA8Mzg0RURBQTguOTZERTNGNDFA
aWl0Lm5yYy5jYT4KRGF0ZTogV2VkLCAwOCBEZWMgMTk5OSAyMjoyNDo0MCArMDAwMApGcm9tOiBD
aGFybGVzLUFudG9pbmUgR2F1dGhpZXIgPGNoYXJsZXMuZ2F1dGhpZXJAaWl0Lm5yYy5jYT4KT3Jn
YW5pemF0aW9uOiBTRUcvSUlUL05SQwpYLU1haWxlcjogTW96aWxsYSA0LjYxIFtlbl0gKFgxMTsg
VTsgTGludXggMi4yLjUtMTUgaTY4NikKWC1BY2NlcHQtTGFuZ3VhZ2U6IGZyLUNBLCBlbgpNSU1F
LVZlcnNpb246IDEuMApUbzogSm9lcmcgQnJ1bnNtYW5uIDxqb2VyZy5icnVuc21hbm5ARmVyblVu
aS1IYWdlbi5kZT4sCiAJamF2YS1kaXNjdXNzQHNvdXJjZXdhcmUuY3lnbnVzLmNvbQpTdWJqZWN0
OiBSZTogW1FdIGNhbid0IGJ1aWxkIGxpYmdjaiBvbiBTb2xhcmlzIDIuNgpSZWZlcmVuY2VzOiA8
Mzg0N0U2MDIuNEIwNEBmZXJudW5pLWhhZ2VuLmRlPgpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47
IGNoYXJzZXQ9aXNvLTg4NTktMQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpKb2Vy
ZyBCcnVuc21hbm4gd3JvdGU6Cj4gCj4gTGluY29sbiBTcGl0ZXJpIHdyb3RlOgo+IAo+ID4gSSBh
bSBjdXJpb3VzLCBkaWQgeW91IGVuYWJsZSB0aHJlYWRzLiBEbyB0aHJlYWRlZCBhcHBsaWNhdGlv
bnMgd29yayBvbiBTb2xhcmlzPwo+ID4gVGhleSB1c2UgdG8gYnV0IHdoZW4gSSB0cmllZCBjb21w
aWxpbmcgZnJvbSBzbmFwc2hvdHMgbGFzdCB3ZWVrIHRoZXkgZGlkIG5vdC4gSXMKPiA+IHRoaXMg
YSBrbm93biBpc3N1ZT8gVGhlcmUgYXJlIG5vIGNsZWFyIHJlZmVyZW5jZXMgYWJvdXQgdGhpcyBv
biB0aGUgbGlzdAo+ID4gYXJjaGl2ZXMuCj4gCj4gSWYgdGhpcyBpcyBvZiBpbnRlcmVzdCBmb3Ig
eW91OiBmb3IgbWUgdGhlIGxhc3QgdmVyc2lvbiBvZiBlZ2NzCj4ga25vd24gdG8gd29yayBvbiBz
cGFyYy9zb2xhcmlzIGlzIGVnY3MtMTk5OTExMTA7IGFsdGhvdWdoCj4gdGhyZWFkZWQgYXBwbGlj
YXRpb25zIGRvbid0IHdvcmsuIFNlZToKPiAKPiAgIGh0dHA6Ly9zb3VyY2V3YXJlLmN5Z251cy5j
b20vbWwvamF2YS1wcnMvMTk5OS1xNC9tc2cwMDE0OS5odG1sCj4gCj4gSSBhcHBsaWVkIHRoZXNl
IHBhdGNoZXMKPiAKPiAgIGh0dHA6Ly9zb3VyY2V3YXJlLmN5Z251cy5jb20vbWwvamF2YS1wYXRj
aGVzLzE5OTktcTQvbXNnMDAwNjUuaHRtbAo+IAo+IGFuZCBhY2hpZXZlZCBhIGRpZmZlcmVudCBi
ZWhhdmlvdXIuIEkgbm93IGdldAo+IAo+IGphdmEubGFuZy5JbGxlZ2FsTW9uaXRvclN0YXRlRXhj
ZXB0aW9uOiBjdXJyZW50IHRocmVhZCBub3Qgb3duZXIKPiAKPiBCVFc6IGVnY3MtMTk5OTExMjIg
ZG9lc24ndCBjb21waWxlIGxpYmdjaiAoZ2NqIGhhbmdzIGR1cmluZwo+IGNvbXBpbGF0aW9uIG9m
IGEgbGliZ2NqIGphdmEgZmlsZSkgYW5kIGVnY3MtMTk5OTEyMDEgZG9lc24ndAo+IGNvbXBpbGUg
YXQgYWxsLgo+IAo+IEr2cmcKCkkgYW0gY3VycmVudGx5IHRyeWluZyB0byBwb3J0IHRoZSBsYXRl
c3QgbGliZ2NqIHNuYXBzaG90IHRvIFJURU1TLiBJIHJhbgppbnRvIHRoZSBqYXZhLmxhbmcuSWxs
ZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbjogY3VycmVudCB0aHJlYWQgbm90Cm93bmVyIHByb2Js
ZW0uIFRoZSBleGNlcHRpb24gd2FzIHRocm93biB3aGVuIHRoZSBKYXZhIHJ1bnRpbWUgdHJpZWQg
dG8KaW5pdGlhbGl6ZSB0aGUgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgbWFpbiBtZXRob2QuIFRo
ZSBwcm9ibGVtIGlzIHRoZQpyZXR1cm4gdmFsdWUgZnJvbSBwdGhyZWFkX211dGV4X3RyeWxvY2so
KSBjYWxsZWQgZnJvbQpfSnZfUHRocmVhZENoZWNrTW9uaXRvciBpbiBsaWJqYXZhL2luY2x1ZGUv
cG9zaXgtdGhyZWFkcy5oLiBTb2xhcmlzIGlzCmRvY3VtZW50ZWQgaW4gcG9zaXgtdGhyZWFkLmgg
YXMgbm90IGhhdmluZyByZWN1cnNpdmUgbXV0ZXhlcyBzbwpwdGhyZWFkX211dGV4X3RyeWxvY2sg
d2lsbCBhbG1vc3QgY2VydGFpbmx5IG5vdCByZXR1cm4gMCBvbiB0aGUgZmlyc3QKY2FsbC4gSG9w
ZWZ1bGx5LCBpdCB3aWxsIHJldHVybiBFREVBRExLLCBpbiB3aGljaCBjYXNlIG15IHBhdGNoIGJl
bG93CnNob3VsZCBoZWxwLgoKLS0tIHBvc2l4LXRocmVhZHMuaAkxOTk5LzEyLzAyIDIwOjA5OjU1
CTEuMS4xLjIKKysrIHBvc2l4LXRocmVhZHMuaAkxOTk5LzEyLzA4IDE4OjA3OjE1CTEuMgpAQCAt
OTUsNiArOTUsNyBAQAogfQoKICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+
CgogLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHVzZWQgb25seSBieSB0aGUgcHRo
cmVhZHMgdGhyZWFkCiAvLyBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgaXMgc2xvdywgYnV0IHRoYXQn
cyB0b28gYmFkIC0tIHdlIG5lZWQgdG8gZG8KQEAgLTEwNCw5ICsxMDUsMzQgQEAKIF9Kdl9QdGhy
ZWFkQ2hlY2tNb25pdG9yIChfSnZfTXV0ZXhfdCAqbXUpCiB7CiAgIHB0aHJlYWRfbXV0ZXhfdCAq
cG11ID0gX0p2X1B0aHJlYWRHZXRNdXRleCAobXUpOwotICAvLyBTZWUgaWYgdGhlIG11dGV4IGlz
IGxvY2tlZCBieSB0aGlzIHRocmVhZC4KLSAgaWYgKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocG11
KSkKKyAgaW50IHN0YXR1czsKCisgIC8vIFNlZSBpZiB0aGUgbXV0ZXggaXMgbG9ja2VkIGJ5IHRo
ZSBjYWxsaW5nIHRocmVhZC4KKyAgLy8gVGhpcyBpcyByZWFsbHkgbWVzc3kuIEFjY29yZGluZyB0
byBQT1NJWCAxMDAzLjEtMTk5NiwgYSBjYWxsIHRvCisgIC8vIHB0aHJlYWRfbXV0ZXhfdHJ5bG9j
ayBzaG91bGQgcmV0dXJuIEVCVVNZIGlmIHRoZSBtdXRleCBpcyBhbHJlYWR5CisgIC8vIGxvY2tl
ZCBieSBhbnkgdGhyZWFkLCBpbmNsdWRpbmcgdGhlIGNhbGxpbmcgdGhyZWFkLiBZZXQgRGF2aWQg
Ui4KKyAgLy8gQnV0ZW5ob2YsICJQcm9ncmFtbWluZyB3aXRoIFBPU0lYIFRocmVhZHMiLCBBZGRp
c29uIFdlc2xleSwgMTk5NywKKyAgLy8gY2xhaW1zIG9uIHBhZ2UgMzE4IHRoYXQgUE9TSVggMTAw
My4xYy0xOTk1IHJlcXVpcmVzIHRoYXQKKyAgLy8gcHRocmVhZF9tdXRleF90cnlsb2NrIHJldHVy
biBFREVBRExLIGlmIHRoZSBjYWxsaW5nIHRocmVhZCBhbHJlYWR5CisgIC8vIG93bnMgdGhlIGxv
Y2sgb24gdGhlIG11dGV4LiBTb21lIGltcGxlbWVudGF0aW9ucyBkbyB0aGlzLiBSVEVNUyBpcwor
ICAvLyBvbmUgb2YgdGhlbS4gV2Ugd2lsbCBhc3N1bWUgdGhhdCBwdGhyZWFkX211dGV4X3RyeWxv
Y2sgcmV0dXJucyAwLAorICAvLyBpbiB3aGljaCBjYXNlIHdlIGVpdGhlciBhY3F1aXJlZCB0aGUg
bXV0ZXggb3IgbG9ja2VkIGl0CnJlY3Vyc2l2ZWx5LAorICAvLyBvciB0aGF0IGl0IHJldHVybnMg
RURFQURMSyBpZiByZWN1cnNpdmUgbXV0ZXhlcyBhcmUgbm90IHN1cHBvcnRlZAorICAvLyBhbmQg
dGhlIGNhbGxlciBhbHJlYWR5IG93bnMgdGhlIGxvY2suIFRoaXMgY29kZSB3aWxsIG5vdCB3b3Jr
IHdpdGgKKyAgLy8gaW1wbGVtZW50YXRpb25zIHRoYXQgcmV0dXJuIEVCVVNZIHdoZW4gdGhlIGNh
bGxlciBhbHJlYWR5IGhvbGRzCnRoZQorICAvLyBsb2NrIG9uIHRoZSBtdXRleC4KKyAgc3RhdHVz
ID0gcHRocmVhZF9tdXRleF90cnlsb2NrIChwbXUpOworICBpZiAoc3RhdHVzID09IEVERUFETEsp
CisgICAgLy8gQ2FsbGVyIGFscmVhZHkgb3ducyB0aGUgbG9jay4gSXQncyBvay4KKyAgICByZXR1
cm4gMDsKKworICBpZiAoc3RhdHVzICE9IDApCisgICAgLy8gVWggb2gsIGNhbGxlciBkb2VzIG5v
dCBvd24gdGhpcyBsb2NrIChvciB3ZSBjYW4ndCB0ZWxsKS4gTG9zZS4KKyAgICByZXR1cm4gMTsK
KworICAvLyBXZSBlaXRoZXIgYWNxdWlyZWQgdGhlIGxvY2sgKG5vdCBnb29kKSwgb3IgbG9ja2Vk
IGl0IHJlY3Vyc2l2ZWx5CihvaykuCisgIC8vIEluIGVpdGhlciBjYXNlLCB1bmRvIHRoZSBlZmZl
Y3Qgb2YgdGhlIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayBhbmQKKyAgLy8gcmV0dXJuIDAgaWYgd2Ug
bG9ja2VkIGl0IHJlY3Vyc2l2ZWx5LCAxIG90aGVyd2lzZS4KICNpZiBkZWZpbmVkIChQVEhSRUFE
X01VVEVYX0hBVkVfTV9DT1VOVCkKICAgLy8gT24gTGludXggd2UgZXhwbG9pdCBrbm93bGVkZ2Ug
b2YgdGhlIGltcGxlbWVudGF0aW9uLgogICBpbnQgciA9IHBtdS0+bV9jb3VudCA9PSAxOwoKCi0t
IApDaGFybGVzLUFudG9pbmUgR2F1dGhpZXIKUmVzZWFyY2ggT2ZmaWNlcgpTb2Z0d2FyZSBFbmdp
bmVlcmluZyBHcm91cApJbnN0aXR1dGUgZm9yIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kKTmF0aW9u
YWwgUmVzZWFyY2ggQ291bmNpbCBvZiBDYW5hZGEKT3R0YXdhLCBPTiwgQ2FuYWRhCksxQSAwUjYK


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2000-12-20 12:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-12-20 12:06 libgcj/1124: _Jv_PthreadCheckMonitor test is not portable charles.gauthier

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).