[Ace-users] [ace-users] Crash releasing ACE_Message_Block	allocated for	asynchfile read
    Steve Huston 
    shuston at riverace.com
       
    Mon Mar  3 17:41:55 CST 2008
    
    
  
Hi Bryan,
Thanks for the PROBLEM-REPORT-FORM.
>     ACE VERSION: 5.5
>     HOST MACHINE and OPERATING SYSTEM: Windows XP
>     COMPILER NAME AND VERSION (AND PATCHLEVEL): Visual Studio 2005
SP1
> 
>     THE $ACE_ROOT/ace/config.h FILE [if you use a link to a
platform-
>     specific file, simply state which one]:
> 
> #include "ace/config-win32.h"
> 
>     AREA/CLASS/EXAMPLE AFFECTED: Proactor, ACE_Asynch_Read_File.
>     DOES THE PROBLEM AFFECT: EXECUTION (my application)
>     SYNOPSIS: 
> 
> My application crashes when I try to release() the ACE_Message_Block
I
> allocated to asynchronously read a file.
> 
>     DESCRIPTION:
> 
> I allocate an ACE_Message_Block and asynchronously try to read a
file
> (in the testcase, it is the testcase's own source file). When the
file
> read is completed, my handler signals the main thread, which 
> then tries
> to release() the message block. At this point, the testcase crashes
in
> _CrtIsValidHeapPointer (called while deleting the
ACE_Message_Block()
> inside release()).
> 
> Is it not safe to release() the message block like this? I 
> couldn't find
> anywhere ACE could be releasing it, and the ACE Programmer's Guide
> implies this should be safe, since it releases() within the
handler's
> handle_*() function...
Yes, it should be safe.
On quick inspection, your code looks ok, modulo the recommendation
that you call ACE_Proactor::instance::proactor_run_event_loop() (and
...end_event_loop).
>     REPEAT BY: See attached aio_testcase.cpp. Build using attached
> aio_testcase.vcproj. Run in the same directory as the source file.
>     SAMPLE FIX/WORKAROUND: Don't release() the message block, but
> wouldn't that be a memory leak?
Yes, it would.
I suspect a heap corruption - I recommend you run this with Purify or
another memory checker to see if that can pinpoint anything.
-Steve
--
Steve Huston, Riverace Corporation
Want to take ACE training on YOUR schedule?
See http://www.riverace.com/training.htm
    
    
More information about the Ace-users
mailing list