From 51b66111af55e26710d5e8e0a8c3f98c38bd7207 Mon Sep 17 00:00:00 2001 From: Dan Gudmundsson Date: Mon, 27 Jun 2011 12:55:56 +0200 Subject: [wx] Fix cleanup memory references Could cause a crash in later restarts --- lib/wx/c_src/wxe_impl.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'lib/wx/c_src') diff --git a/lib/wx/c_src/wxe_impl.cpp b/lib/wx/c_src/wxe_impl.cpp index 95755978f1..70d4c4b29e 100644 --- a/lib/wx/c_src/wxe_impl.cpp +++ b/lib/wx/c_src/wxe_impl.cpp @@ -588,7 +588,7 @@ void WxeApp::destroyMemEnv(wxeMetaCommand& Ecmd) { } else { delete_object(ptr, refd); } - if(type == 0 || type > 3) { + if(type == 0 || type > 2) { // Delete refs for leaks and non overridden allocs delete refd; ptr2ref.erase(it); @@ -602,13 +602,13 @@ void WxeApp::destroyMemEnv(wxeMetaCommand& Ecmd) { } } } - // Assert ? -// for(ptrMap::iterator it = ptr2ref.begin(); it != ptr2ref.end(); it++) { -// wxeRefData *refd = it->second; -// if(refd->ref >= global_me->next) -// fprintf(stderr, "L %d %d\r\n", refd->ref, refd->alloc_in_erl); -// } -// fflush(stderr); +// // Assert ? +// for(ptrMap::iterator it = ptr2ref.begin(); it != ptr2ref.end(); it++) { +// wxeRefData *refd = it->second; +// if(refd->ref >= global_me->next) +// fprintf(stderr, "L %d %d %d\r\n", refd->ref, refd->type, refd->alloc_in_erl); +// } +// fflush(stderr); delete memenv; driver_pdl_dec_refc(Ecmd.pdl); refmap.erase((ErlDrvTermData) Ecmd.port); @@ -650,12 +650,12 @@ int WxeApp::getRef(void * ptr, wxeMemEnv *memenv) { ptrMap::iterator it = ptr2ref.find(ptr); if(it != ptr2ref.end()) { wxeRefData *refd = it->second; - if(refd->memenv == memenv) { + if(refd->memenv == memenv || refd->memenv == global_me) { // Found it return return refd->ref; } // else // Old reference to deleted object, release old and recreate in current memenv. - clearPtr(ptr); + ptr2ref.erase(it); } int ref; intList free = memenv->free; -- cgit v1.2.3