[haiku-bugs] Re: [Haiku] #11497: Media/mixer crash, either buffer "oops" or NULL indirection in float_to_float()

  • From: "ttcoder" <trac@xxxxxxxxxxxx>
  • Date: Fri, 12 Dec 2014 20:08:57 -0000

#11497: Media/mixer crash, either buffer "oops" or NULL indirection in
float_to_float()
-----------------------------------+----------------------------
   Reporter:  ttcoder              |      Owner:  nobody
       Type:  bug                  |     Status:  new
   Priority:  critical             |  Milestone:  R1/beta1
  Component:  Add-Ons/Media/Mixer  |    Version:  R1/Development
 Resolution:                       |   Keywords:
 Blocked By:                       |   Blocking:  11584
Has a Patch:  0                    |   Platform:  All
-----------------------------------+----------------------------

Comment (by ttcoder):

 IIRC think ports are created with a certain capacity, and start *dropping*
 new incomings if write_port incomings come fast enough to override that
 capacity before read_port removes them (my experience on ports is almost
 only with BLoopers: their port is
 [http://grok.bikemonkey.org/source/xref/haiku/src/kits/app/Looper.cpp#963
 created] with something like
 [http://grok.bikemonkey.org/source/xref/haiku/headers/build/os/app/Looper.h#13
 200]  slots, and the thread tries to run as fast as possible to move them
 safely to a BMessageList where capacity is not limited... yet I know from
 trying unreasonable stuff with them that even that can be overwhelmed, I
 could e.g. send 201+ BMessages before the thread would wake up or be
 available).

 ==

 If the above lead does not give easy results, also appreciated if you
 could try this tracing (which I cannot do here):


 {{{
 BBuffer::SetHeader(const media_header* header)
   ..
 +               //or debug_printf() if TRACE() does not end up into
 syslog?
 +               TRACE("fMediaHeader.buffer: %ld (wanted: %ld)  perf_time:
 %Ld (wanted: %Ld)\n", fMediaHeader.buffer, header->buffer,
 fMediaHeader.start_time, header->start_time);
                 debugger("oops");

 }}}
 and

 {{{
 BufferCache::GetBuffer(media_buffer_id id)
   ..
         if (buffer == NULL)
                 return NULL;
 +       if (buffer->Data() == NULL)
 +               debugger("wow, this might be the reason we later hit
 'oops' indeed!");

 }}}

--
Ticket URL: <https://dev.haiku-os.org/ticket/11497#comment:12>
Haiku <https://dev.haiku-os.org>
Haiku - the operating system.

Other related posts: