Re: More MIDI sysex problems
Re: More MIDI sysex problems
- Subject: Re: More MIDI sysex problems
- From: Doug Wyatt <email@hidden>
- Date: Sat, 5 Jan 2002 13:49:07 -0800
On Saturday, January 5, 2002, at 04:14 , Kurt Revis wrote:
By the way, here's another bug (or undocumented limitation, take your
pick):
When using MIDISend(), if your packet list has one packet, and the
packet list is greater than 1054 bytes in size, you will crash or hang
the MIDIServer process, and any further calls to CoreMIDI functions
will hang your app (and any others using CoreMIDI). MIDISend() won't
return an error. Using more packets doesn't make a big difference (I
tried with 50 packets in a packet list, and didn't crash until I got to
1059 bytes of total packet list size).
I'm guessing that there's an internal 1024-byte buffer that's getting
overrun. When MIDIServer crashes, the backtrace in the crashed thread
looks pretty messed up (more so depending if your packet list is
longer).
Yes, I recently found and fixed this ... (2830198 which you probably
won't be able to see externally).
The obvious workaround is to split up sends into more packet lists, or
use MIDISendSysex(). Inconvenient, but that's how it goes.
The good news is that as of 10.1.2 the IPC mechanism was rewritten and
there is no longer a significant performance difference between sending
one large vs. multiple small packetlists via MIDISend.
I just submitted this as bug #2836647. Hopefully this info will save
somebody else some time.
Thanks for investigating and documenting this for others ...
Doug
--
Doug Wyatt
work: email@hidden
personal: email@hidden
http://www.sonosphere.com
Synchronicity, 16 Jan 2001:
"Example is more important than precept."
-- fortune cookie
"Religion is the life we lead, not the creed we profess."
-- sign on Unitarian church passed 5 minutes later