public inbox for java-prs@sourceware.org help / color / mirror / Atom feed
From: "daney at gcc dot gnu dot org" <gcc-bugzilla@gcc.gnu.org> To: java-prs@gcc.gnu.org Subject: [Bug libgcj/18266] GCJ: Using references drops finalizers causing all apps to eventually crash ( SIGSEGV in GC_register_finalizer_inner () ) Date: Fri, 26 Sep 2008 15:58:00 -0000 [thread overview] Message-ID: <20080926155821.2054.qmail@sourceware.org> (raw) In-Reply-To: <bug-18266-7936@http.gcc.gnu.org/bugzilla/> ------- Comment #20 from daney at gcc dot gnu dot org 2008-09-26 15:58 ------- 1) Create an object. 2) Enter a synchronized block on the object and do Object.wait(). 3) In a second thread, enter a synchronized block on the object. There is lock contention, heavy lock escalation is guaranteed. Hash synchronization code registers a finalizer recording the old finalizer. The old finalizer is null as no finzlizers have been registered for the object. 4) Create a WeakReference to the Object. This adds a finalizer, overwriting and thus losing the Hash synchronization's finalizer. 5) Both threads leave the synchronized block. At this point the heavy_lock object in the hash synchronization code in no longer in use and is eligible for clean up. 6) Many other locks are acquired and released, some of these hash to the same value as the lock used in steps 1 and 2. Eventually the hash row for these locks is cleaned up. The clean up code restores the saved finalizer from step 3 which was null, thus overwriting the WeakReference's finalizer. 7) WeakReference's referent is GCed, but its finalizer has been removed in step 6, so it does not get cleaned up. If you ever synchronize o the If the object itself is a WeakReference, the same thing happens, but ref->enqueue is called on the WeakReference. If A different type of object has been allocated in the WeakReference's previous location, when the referent is finalized ref->enqueue will be called through the vtable of the new object resulting sometimes in SIGSEGV or other types of bad behavior. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18266
prev parent reply other threads:[~2008-09-26 15:58 UTC|newest] Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <bug-18266-7936@http.gcc.gnu.org/bugzilla/> 2006-03-08 19:27 ` [Bug libgcj/18266] SIGSEGV in GC_register_finalizer_inner () tromey at gcc dot gnu dot org 2006-11-03 22:58 ` [Bug libgcj/18266] GCJ: Using references drops finalizers causing all apps to eventually crash ( SIGSEGV in GC_register_finalizer_inner () ) r_ovidius at eml dot cc 2008-09-22 20:08 ` daney at gcc dot gnu dot org 2008-09-22 23:56 ` daney at gcc dot gnu dot org 2008-09-23 17:40 ` daney at gcc dot gnu dot org 2008-09-23 23:39 ` Hans dot Boehm at hp dot com 2008-09-26 15:58 ` daney at gcc dot gnu dot org [this message]
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20080926155821.2054.qmail@sourceware.org \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=java-prs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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).