[pulseaudio-discuss] ABI breakage in introspect (85e7fbc196f4424f68e530c2e3a01d9b941f293e)
Colin Guthrie
gmane at colin.guthr.ie
Thu Jan 9 05:27:20 PST 2014
[ Solved, Tanu is on the ball once again! Ignore the pointless patch (it
truely is pointless) ]
See below if you want more info.
'Twas brillig, and Tanu Kaskinen at 09/01/14 12:50 did gyre and gimble:
> On Thu, 2014-01-09 at 10:07 +0000, Colin Guthrie wrote:
>> Hi,
>>
>> In order to get Bluetooth support (at least A2DP) I've been tracking the
>> 5.0 release for Mageia (it's generally an unfortunate situation but such
>> is life).
>>
>> Sadly there appears to be some ABI breakage introduced related to card
>> profiles.
>>
>> This is purportedly fixed by the below commit but I think there are
>> still issues.
>>
>> I've had crashes reported in both KDE's kcm_phonon (the bits which which
>> I wrote) and pavucontrol directly, both related to updating card info.
>> It seems invalid string information is passed in to string compare
>> functions and they crash.
>>
>> https://bugs.mageia.org/show_bug.cgi?id=12155
>
> Here's a snippet of the pavucontrol backtrace:
>
> Program received signal SIGSEGV, Segmentation fault.
> __strcmp_ssse3 () at ../sysdeps/i386/i686/multiarch/strcmp-ssse3.S:240
> 240 movzbl (%eax), %ecx
> (gdb) bt
> #0 __strcmp_ssse3 () at ../sysdeps/i386/i686/multiarch/strcmp-ssse3.S:240
> #1 0x0806daa0 in operator() (this=0xbfffe80c, lhs=..., lhs=..., rhs=...,
> rhs=...) at mainwindow.cc:43
> #2 _M_get_insert_unique_pos (__k=..., this=0xbfffe80c)
> at /usr/include/c++/4.8.2/bits/stl_tree.h:1324
> #3 std::_Rb_tree<pa_card_profile_info, pa_card_profile_info, std::_Identity<pa_card_profile_info>, profile_prio_compare, std::allocator<pa_card_profile_info> >::_M_insert_unique (this=0xbfffe80c, __v=...)
> at /usr/include/c++/4.8.2/bits/stl_tree.h:1377
> #4 0x08069947 in insert (__x=..., this=0xbfffe80c)
> at /usr/include/c++/4.8.2/bits/stl_set.h:463
> #5 MainWindow::updateCard (this=0x822e688, info=...) at mainwindow.cc:319
> #6 0xb7422e33 in context_get_card_info_callback (pd=pd at entry=0x8133208,
> command=command at entry=2, tag=tag at entry=5, t=t at entry=0x825f930,
> userdata=userdata at entry=0x82c94f8) at pulse/introspect.c:971
>
> One of the parameters of std::_Rb_tree is
> std::allocator<pa_card_profile_info>, and that looks like the data
> structure allocates pa_card_profile_info objects. That's not safe. It
> looks like pavucontrol is buggy.
Just out of interest, why is that not safe? Is allocating a struct not
safe in a set?
Various bits I've read seem to suggest this isn't a problem.
> void MainWindow::updateCard(const pa_card_info &info) {
> ...
> std::set<pa_card_profile_info,profile_prio_compare> profile_priorities;
>
> The set should contain pointers, not whole profile info objects.
Using pointers seems somewhat counter-intuitive. By default the ordering
semantics would be on the pointer address which is pretty arbitrary
(although I accept that it's likely equally arbitrary with structs
without overloading the < operator, which we don't do anyway)
> Hmm... but pa_card_profile_info hasn't been modified in the current
> master compared to v4.0, so if pavucontrol was compiled against libpulse
> from v4.0, there should be no problem. Is it possible that pavucontrol
> was compiled against some earlier git snapshot in Mageia that had the
> available flag added to pa_card_profile_info, and now that the flag was
> removed, pavucontrol broke?
Yeah it was complied Sat 19 Oct 2013 00:02:08 BST, at which point the PA
itself was a 5.0 snapshot at f81e3e1d7852c05b4b737ac7dac4db95798f0117.
So thinking about it a bit more, I can see the problem and yes, you got
it bang on as f81e3e1d7852c05b4b737ac7dac4db95798f0117 included the ABI
break but not the fix! D'oh!!
Sorry for noise!
Thanks Tanu!
Col
--
Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/
Day Job:
Tribalogic Limited http://www.tribalogic.net/
Open Source:
Mageia Contributor http://www.mageia.org/
PulseAudio Hacker http://www.pulseaudio.org/
Trac Hacker http://trac.edgewall.org/
More information about the pulseaudio-discuss
mailing list