On Jul 18, 2013 10:32 AM, "Tanu Kaskinen" <tanu.kaskinen at linux.intel.com> wrote: > > On Fri, 2013-07-12 at 15:06 -0300, jprvita at gmail.com wrote: > > From: Jo?o Paulo Rechi Vita <jprvita at openbossa.org> > > > > pa_bluetooth_discovery is the struct that holds information about known > > Bluetooth audio devices and other information about the Bluetooth stack. > > > > This commit also creates bluez5-util.[ch], which will hold a lot of > > utility functions to help with the BlueZ 5 support. > > So there will be bluez4-util.so and bluez5-util.so, and those will > contain identical symbols. It's possible to load both bluez 4 and 5 > modules at the same time, so the bluez*-util libraries will conflict in > a way that will cause crashing or weird behavior. Since we lost the > opportunity to have a shared Bluetooth core for all backends, I think it > would be OK to change the generic "pa_bluetooth" prefix (and "pa_bt", if > it's still used somewhere) to "pa_bluez5". That would resolve the symbol > conflict between the two libraries. > Good catch, I haven't thought about this problem before. > Another, perhaps easier solution would be to use symbol versioning in > the libraries. I'm not 100% sure that this works, but I think it should > work. > How does it works? I have never done or seen it anywhere. > To be clear, I don't think it's a valid use case to load both versions > at the same time, but we must not crash due to configuration errors. > Yes, I agree. > > --- > > src/Makefile.am | 10 +++- > > src/modules/bluetooth/bluez5-util.c | 74 ++++++++++++++++++++++++++ > > src/modules/bluetooth/bluez5-util.h | 32 +++++++++++ > > src/modules/bluetooth/module-bluez5-discover.c | 33 ++++++++++++ > > 4 files changed, 148 insertions(+), 1 deletion(-) > > create mode 100644 src/modules/bluetooth/bluez5-util.c > > create mode 100644 src/modules/bluetooth/bluez5-util.h > > > > diff --git a/src/Makefile.am b/src/Makefile.am > > index 733c338..52cd63f 100644 > > --- a/src/Makefile.am > > +++ b/src/Makefile.am > > @@ -1333,6 +1333,7 @@ endif > > if HAVE_BLUEZ_5 > > modlibexec_LTLIBRARIES += \ > > module-bluetooth-policy.la \ > > + libbluez5-util.la \ > > module-bluez5-discover.la > > endif > > > > @@ -2049,9 +2050,16 @@ module_bluez4_device_la_LIBADD = $(MODULE_LIBADD) $(DBUS_LIBS) $(SBC_LIBS) libbl > > module_bluez4_device_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS) $(SBC_CFLAGS) > > > > # Bluetooth BlueZ 5 sink / source > > +libbluez5_util_la_SOURCES = \ > > + modules/bluetooth/bluez5-util.c \ > > + modules/bluetooth/bluez5-util.h > > +libbluez5_util_la_LDFLAGS = -avoid-version > > +libbluez5_util_la_LIBADD = $(MODULE_LIBADD) $(DBUS_LIBS) > > +libbluez5_util_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS) > > + > > module_bluez5_discover_la_SOURCES = modules/bluetooth/module-bluez5-discover.c > > module_bluez5_discover_la_LDFLAGS = $(MODULE_LDFLAGS) > > -module_bluez5_discover_la_LIBADD = $(MODULE_LIBADD) $(DBUS_LIBS) > > +module_bluez5_discover_la_LIBADD = $(MODULE_LIBADD) $(DBUS_LIBS) libbluez5-util.la > > module_bluez5_discover_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS) > > > > # Apple Airtunes/RAOP > > diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/bluetooth/bluez5-util.c > > new file mode 100644 > > index 0000000..0f23bff > > --- /dev/null > > +++ b/src/modules/bluetooth/bluez5-util.c > > @@ -0,0 +1,74 @@ > > +/*** > > + This file is part of PulseAudio. > > + > > + Copyright 2008-2013 Jo?o Paulo Rechi Vita > > + > > + PulseAudio is free software; you can redistribute it and/or modify > > + it under the terms of the GNU Lesser General Public License as > > + published by the Free Software Foundation; either version 2.1 of the > > + License, or (at your option) any later version. > > + > > + PulseAudio is distributed in the hope that it will be useful, but > > + WITHOUT ANY WARRANTY; without even the implied warranty of > > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > + General Public License for more details. > > + > > + You should have received a copy of the GNU Lesser General Public > > + License along with PulseAudio; if not, write to the Free Software > > + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 > > + USA. > > +***/ > > + > > +#ifdef HAVE_CONFIG_H > > +#include <config.h> > > +#endif > > + > > +#include <pulse/xmalloc.h> > > + > > +#include <pulsecore/core.h> > > +#include <pulsecore/macro.h> > > +#include <pulsecore/refcnt.h> > > +#include <pulsecore/shared.h> > > + > > +#include "bluez5-util.h" > > + > > +struct pa_bluetooth_discovery { > > + PA_REFCNT_DECLARE; > > + > > + pa_core *core; > > +}; > > + > > +pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *c) { > > + pa_bluetooth_discovery *y; > > + > > + if ((y = pa_shared_get(c, "bluetooth-discovery"))) > > + return pa_bluetooth_discovery_ref(y); > > This is another source of crashy conflicts: bluez4-util uses the same > shared name, so you may end up returning bluez4 version of > pa_bluetooth_discovery to bluez5 code, or vice versa. > For this one we can simply use different names for BlueZ 4 and BlueZ 5. > -- > Tanu > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/pulseaudio-discuss/attachments/20130725/641ebeee/attachment-0001.html>