public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Don't delete a local ref before it's last use. Date: Sat, 07 Jun 2008 16:51:00 -0000 [thread overview] Message-ID: <20080607165109.1528.qmail@sourceware.org> (raw) The branch, master has been updated via 4baf67699b3de5a88098a8eec820593ae4d153f2 (commit) from 7412e5a7e9e3256885448ede4d72c302ddbc469e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 4baf67699b3de5a88098a8eec820593ae4d153f2 Author: Andrew Cagney <cagney@redhat.com> Date: Sat Jun 7 12:50:22 2008 -0400 Don't delete a local ref before it's last use. frysk-sys/lib/dwfl/ChangeLog 2008-06-07 Andrew Cagney <cagney@redhat.com> * jni/ElfSymbol.cxx (ElfSymbol::elf_load_verneed): Don't delete a local ref before you're finished with it. ----------------------------------------------------------------------- Summary of changes: frysk-sys/lib/dwfl/ChangeLog | 5 ++++ frysk-sys/lib/dwfl/jni/ElfSymbol.cxx | 35 ++++++++++++++++++++------------- 2 files changed, 26 insertions(+), 14 deletions(-) First 500 lines of diff: diff --git a/frysk-sys/lib/dwfl/ChangeLog b/frysk-sys/lib/dwfl/ChangeLog index 101e9c2..762b92a 100644 --- a/frysk-sys/lib/dwfl/ChangeLog +++ b/frysk-sys/lib/dwfl/ChangeLog @@ -1,3 +1,8 @@ +2008-06-07 Andrew Cagney <cagney@redhat.com> + + * jni/ElfSymbol.cxx (ElfSymbol::elf_load_verneed): Don't delete a + local ref before you're finished with it. + 2008-06-06 Andrew Cagney <cagney@redhat.com> * TestDwarfDie.java (testGetModule()): Use LocalMemory diff --git a/frysk-sys/lib/dwfl/jni/ElfSymbol.cxx b/frysk-sys/lib/dwfl/jni/ElfSymbol.cxx index cff02d1..c00ea47 100644 --- a/frysk-sys/lib/dwfl/jni/ElfSymbol.cxx +++ b/frysk-sys/lib/dwfl/jni/ElfSymbol.cxx @@ -94,40 +94,44 @@ lib::dwfl::ElfSymbol::elf_load_verneed(jnixx::env env, int count = ret.GetArrayLength(env); int offset = 0; for (int i = 0; i < count; ++i) { + Need verneed; + jnixx::array<Aux> aux_elems; ::GElf_Verneed ver; if (::gelf_getverneed(data, offset, &ver) == NULL) return false; - Need verneed = Need::New(env); + verneed = Need::New(env); ret.SetObjectArrayElement(env, i, verneed); int auxcount = ver.vn_cnt; verneed.SetVersion(env, ver.vn_version); verneed.SetFilename(env, parent.getStringAtOffset(env, str_sect_index, ver.vn_file)); - jnixx::array<Aux> aux_elems - = jnixx::array<Aux>::NewObjectArray(env, auxcount); + aux_elems = jnixx::array<Aux>::NewObjectArray(env, auxcount); verneed.SetAux(env, aux_elems); int aux_offset = offset + ver.vn_aux; offset += ver.vn_next; for (int j = 0; j < auxcount; ++j) { + String jname; + Aux vernaux; ::GElf_Vernaux aux; if (::gelf_getvernaux(data, aux_offset, &aux) == NULL) return false; - Aux vernaux = Aux::New(env); + vernaux = Aux::New(env); vernaux.SetHash(env, (jint)aux.vna_hash); vernaux.SetWeak(env, (bool)((aux.vna_flags & VER_FLG_WEAK) == VER_FLG_WEAK)); - String jname = parent.getStringAtOffset(env, str_sect_index, - aux.vna_name); + jname = parent.getStringAtOffset(env, str_sect_index, aux.vna_name); vernaux.SetName(env, jname); - jname.DeleteLocalRef(env); vernaux.SetIndex(env, (jint)aux.vna_other); - vernaux.DeleteLocalRef(env); aux_elems.SetObjectArrayElement(env, j, vernaux); aux_offset += aux.vna_next; + vernaux.DeleteLocalRef(env); + jname.DeleteLocalRef(env); } + aux_elems.DeleteLocalRef(env); + verneed.DeleteLocalRef(env); } return true; } @@ -145,11 +149,13 @@ lib::dwfl::ElfSymbol::elf_load_verdef(jnixx::env env, int count = ret.GetArrayLength(env); int offset = 0; for (int i = 0; i < count; ++i) { + jnixx::array<String> names_elems; + Def verdef; ::GElf_Verdef ver; if (::gelf_getverdef(data, offset, &ver) == NULL) return false; - Def verdef = Def::New(env); + verdef = Def::New(env); ret.SetObjectArrayElement(env, i, verdef); int auxcount = ver.vd_cnt; @@ -157,23 +163,24 @@ lib::dwfl::ElfSymbol::elf_load_verdef(jnixx::env env, verdef.SetBase(env, (bool)((ver.vd_flags & VER_FLG_BASE) == VER_FLG_BASE)); verdef.SetIndex(env, ver.vd_ndx); verdef.SetHash(env, ver.vd_hash); - jnixx::array<String> names_elems - = jnixx::array<String>::NewObjectArray(env, auxcount); + names_elems = jnixx::array<String>::NewObjectArray(env, auxcount); verdef.SetNames(env, names_elems); verdef.DeleteLocalRef(env); int aux_offset = offset + ver.vd_aux; offset += ver.vd_next; for (int j = 0; j < auxcount; ++j) { + String jname; ::GElf_Verdaux aux; if (::gelf_getverdaux(data, aux_offset, &aux) == NULL) return false; - String jname = parent.getStringAtOffset(env, str_sect_index, - aux.vda_name); + jname = parent.getStringAtOffset(env, str_sect_index, aux.vda_name); names_elems.SetObjectArrayElement(env, j, jname); - jname.DeleteLocalRef(env); aux_offset += aux.vda_next; + jname.DeleteLocalRef(env); } + verdef.DeleteLocalRef(env); + names_elems.DeleteLocalRef(env); } return true; } hooks/post-receive -- frysk system monitor/debugger
reply other threads:[~2008-06-07 16:51 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20080607165109.1528.qmail@sourceware.org \ --to=cagney@sourceware.org \ --cc=frysk-cvs@sourceware.org \ --cc=frysk@sourceware.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).