Itamar

I'm afraid it's a stopgap only. No tests done to see how it affects
multi-threaded use or if it breaks anything else.

Also, having DllMain in ThreadLocal.cpp is a problem for those who
implement their own DllMain -- so you're right, let's leave it for Ben
to review and / or wait for Isidor to finish his work.

Regards
Celto


On Fri, Nov 13, 2009 at 4:09 AM, Itamar Syn-Hershko
<ita...@divrei-tora.com> wrote:
> Celto,
>
> Is this a stopgap or an actual fix? I'm less familiar with the code there,
> it's more of Ben's work (and we are about to move to Boost Threads -- still
> waiting for the person to take this up to completion) so I'd rather not
> touch it for now unless there is a proven test case to make it crash and
> then this fix indeed resolves the issue without breaking anything else.
>
> BTW, as _internal is always created using new (as opposed to _CLNEW)
> internally, you would rather use delete _internal; than the _CLDELETE macro.
> You can also nullify it yourself, but there's no point in nullifying member
> variables in the destructor unless they are shared.
>
> Itamar.
>
> -----Original Message-----
> From: cel tix44 [mailto:celti...@gmail.com]
> Sent: Wednesday, November 11, 2009 1:04 AM
> To: clucene-developers@lists.sourceforge.net
> Subject: [CLucene-dev] Branch 2.3.2 -- crash in ThreadLocal.cpp
>
> Team
>
> I hit a crash while testing a DLL compiled from the GIT branch marked "ASCII
> + misc fixes". I used CMake 2.6.4 to generate code for VS 2008 with
> ENABLE_ASCII_MODE | DISABLE_MULTITHREADING.
>
> It appears that (under certain circumstances) DLLMain implemented in
> ThreadLocal.cpp gets invoked with fdwReason=3 (DLL_THREAD_DETACH) more than
> once. As my test is compiled with DISABLE_MULTITHREADING,
> UnregisterCurrentThread() attempts to unregister the same (current) thread
> more than once, which causes Access Violation with NULL pointers or pointers
> to 0xFEEEFEEE (freed memory).
>
> As a stopgap, I used the fix below.
>
> Regards
> Celto
>
> -------------------------
> 1) in _ThreadLocal::~_ThreadLocal():
> replace this line:
>           delete _internal;
> with:
>        _CLDELETE(_internal);
>        _CLDELETE(threadData);
>
> 2) in _ThreadLocal::setNull()
> add this check:
>                if (_internal == NULL ){
>                        return;
>                }
>
> ----------------------------------------------------------------------------
> --
> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
> trial. Simplify your report design, integration and deployment - and focus
> on what you do best, core application coding. Discover what's new with
> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
> _______________________________________________
> CLucene-developers mailing list
> CLucene-developers@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/clucene-developers
>
>
>
> ------------------------------------------------------------------------------
> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
> trial. Simplify your report design, integration and deployment - and focus on
> what you do best, core application coding. Discover what's new with
> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
> _______________________________________________
> CLucene-developers mailing list
> CLucene-developers@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/clucene-developers
>

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
CLucene-developers mailing list
CLucene-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/clucene-developers

Reply via email to