| 
      
      
      From: Bastiaan B. <bas...@li...> - 2002-04-04 19:46:45
      
     | 
| Hi,
Yes, I see the stupid bug now, a misplaced '}'.  Thanks for reporting it!
Bastiaan
Jak...@no... wrote:
>Hi,
>
>Yes, now I see that bug description.
>But I have taken most current version from cvs ...
>it is commented "fix invalidated iterator usage. (bug #527467)"
>and it is 1.34.
>
>It still causes problem int13 ;-)
>
>problem is with delete (*i) and then doing i++.
>other problem is that _ownsAppender.clear() and _appender.clear()
>are put in for loop. So they are run in thirst iteration ...
>In bug description they are run after for, which make sense.
>
>
>
>    void Category::removeAllAppenders() {
>        threading::ScopedLock lock(_appenderSetMutex);
>        {
>            for (AppenderSet::iterator i = _appender.begin();
>                 i != _appender.end(); i++) {
>                // found
>                OwnsAppenderMap::iterator i2;
>                if (ownsAppender(*i, i2)) {
>                    delete (*i);
>                }
>               
>                _ownsAppender.clear();
>                _appender.clear();
>            }
>        }
>    }
>
>
>cheers,
>--jakub
>
> 
> 
>
>
>>-----Original Message-----
>>From: ext Bastiaan Bakker [  <mailto:bas...@li...> mailto:bas...@li...]
>>Sent: 2. april 2002 22:48
>>To: Szymanski Jakub (NET/Copenhagen)
>>Cc: log...@li...
>>Subject: Re: [Log4cpp-devel] problem with Category::removeAllAppenders
>>
>>
>>Hi Jakub,
>>
>>This is a known bug (#527467) and a fix has been committed to
>>CVS (HEAD
>>branch). I intend to release 0.3.1 (containing the fix) later
>>this week.
>>
>>Thanks,
>>
>>Bastiaan Bakker
>>LifeLine Networks bv
>>
>>Jak...@no... wrote:
>>
>>>Hi,
>>>
>>>I run log4cpp on VC6.0 SP5. Version 0.30 + Category and Appender
>>>
>>>from CVS.
>>
>>>I have problem with Category::removeAllAppenders.
>>>Version 1.34 (most current in CVS).
>>>
>>>When I run testCategory (or my simple tests) I have
>>>Unhandled exception Access Violation
>>>with stack trace:
>>>[ ....cut ...]
>>>log4cpp::Category::removeAllAppenders() line 152 + 16 bytes
>>>main(int 1, char * * 0x004417d0) line 144 + 13 bytes
>>>mainCRTStartup() line 338 + 17 bytes
>>>KERNEL32! 77f1ba06()
>>>
>>>
>>>There is:
>>>   void Category::removeAllAppenders() {
>>>       threading::ScopedLock lock(_appenderSetMutex);
>>>       {
>>>           for (AppenderSet::iterator i = _appender.begin();
>>>                i != _appender.end(); i++) {
>>>               // found
>>>               OwnsAppenderMap::iterator i2;
>>>               if (ownsAppender(*i, i2)) {
>>>                   delete (*i);
>>>               }
>>>              
>>>               _ownsAppender.clear();
>>>               _appender.clear();
>>>           }
>>>       }
>>>   }
>>>
>>>
>>>Problem is with delete of current iterator. Acording to specs and
>>>good comment in Appender.cpp you can't use iterator after
>>>
>>deleteing it
>>
>>>[
>>>Appender::_deleteAllAppenders()
>>>--- cut ---
>>>           i++; // increment iterator before delete or
>>>
>>iterator will be invalid.
>>
>>>           delete (app);
>>>]
>>>
>>>
>>>So I changed code to:
>>>   void Category::removeAllAppenders() {
>>>       threading::ScopedLock lock(_appenderSetMutex);
>>>       {
>>>           Appender* app;
>>>           AppenderSet::iterator i2;
>>>
>>>           for (AppenderSet::iterator i = _appender.begin();
>>>                i != _appender.end(); ) {
>>>               // found
>>>               app = *i;
>>>               i2 = i;
>>>               i++;
>>>
>>>               OwnsAppenderMap::iterator i3;
>>>               if (ownsAppender(*i2, i3)) {
>>>                   delete app;
>>>               }
>>>            }
>>>               
>>>               _ownsAppender.clear();
>>>               _appender.clear();
>>>       }
>>>   }
>>>
>>>and it passes testCategory test.
>>>
>>>cheers,
>>>--jakub
>>>
>>>
>>>
>>>
>>>
>>>
>>>_______________________________________________
>>>Log4cpp-devel mailing list
>>>Log...@li...
>>> <https://lists.sourceforge.net/lists/listinfo/log4cpp-devel> https://lists.sourceforge.net/lists/listinfo/log4cpp-devel
>>>
>>
>>
>
>
 |