[haiku-bugs] [Haiku] #9989: app server should not delete UtilityBitmap with delete

  • From: "bonefish" <trac@xxxxxxxxxxxx>
  • Date: Thu, 19 Sep 2013 16:19:41 -0000

#9989: app server should not delete UtilityBitmap with delete
--------------------------------+------------------------------
 Reporter:  bonefish            |        Owner:  axeld
     Type:  bug                 |       Status:  new
 Priority:  normal              |    Milestone:  R1
Component:  Servers/app_server  |      Version:  R1/Development
 Keywords:                      |   Blocked By:
 Blocking:                      |  Has a Patch:  0
 Platform:  All                 |
--------------------------------+------------------------------
 When building libbe with `DEBUG=1` the app server runs into the following
 assertion:
 {{{
 418: DEBUGGER: Deleted referenceable object that's not on the stack (this:
 0x400ddc8, stack_base: 0x688c7000, stack_end: 0x68907000)

 debug_server: Thread 418 entered the debugger: Debugger call: `Deleted
 referenceable object that's not on the stack (this: 0x400ddc8, stack_base:
 0x688c7000, stack_end: 0x68907000)
 '
 stack trace, current PC 0x63356114  commpage_syscall + 0x4:
   (0x68905da0)  0x17133fd  _ZN14BReferenceableD2Ev + 0x129
   (0x68905f20)  0x127f79e  _ZN12ServerBitmapD2Ev + 0x80
   (0x68905f50)  0x127f822  _ZN13UtilityBitmapD1Ev + 0x26
   (0x68905f70)  0x127f846  _ZN13UtilityBitmapD0Ev + 0x1c
   (0x68905f90)  0x125e315  _ZN19BitmapDrawingEngine7SetSizeEll + 0xfb
   (0x68905ff0)  0x129e836
 _ZN16DefaultDecorator19_GetBitmapForButtonEPN9Decorator3TabENS_9ComponentEbll
 + 0x14a
   (0x689060a0)  0x129ebba
 _ZN16DefaultDecorator9_DrawZoomEPN9Decorator3TabEb5BRect + 0xbc
   (0x68906110)  0x129dbeb
 _ZN16DefaultDecorator11DrawButtonsEPN9Decorator3TabERK5BRect + 0xd3
   (0x68906180)  0x129f2f2
 _ZN16DefaultDecorator8_DrawTabEPN9Decorator3TabE5BRect + 0x462
   (0x68906300)  0x129caa4  _ZN9Decorator9_DrawTabsE5BRect + 0xc0
   (0x68906360)  0x129d31b  _ZN16DefaultDecorator4DrawE5BRect + 0x6b
   (0x689063a0)  0x1294e5a  _ZN6Window11_DrawBorderEv + 0xee
   (0x689063f0)  0x12966c9  _ZN6Window17RedrawDirtyRegionEv + 0x5b
   (0x68906430)  0x128e701  _ZN12ServerWindow14_MessageLooperEv + 0x221
   (0x689064c0)  0x12725ff  _ZN13MessageLooper15_message_threadEPv + 0xf
   (0x689064e0)  0xde7947  thread_entry + 0x1c
 }}}

 `BitmapDrawingEngine::SetSize()` deletes a `UtilityBitmap`, which is a
 `BReferenceable`, object with the `delete` operator. The reference count
 is 1, so that the assertion in the `BReferenceable` destructor is
 triggered.

 Since it is impossible for the check to know whether this is erroneous use
 -- and the check itself is quite useful -- something else needs to be
 changed. One thing that comes to mind is using `ReleaseReference()`
 instead. Adding a `Delete()` method which could check the reference count,
 might be even nicer. Not sure, if adding a private `delete` operator would
 be possible to explicitly prevent it from being called.

--
Ticket URL: <http://dev.haiku-os.org/ticket/9989>
Haiku <http://dev.haiku-os.org>
Haiku - the operating system.

Other related posts: