diff -u bluez-4.66/debian/bluez.preinst bluez-4.66/debian/bluez.preinst --- bluez-4.66/debian/bluez.preinst +++ bluez-4.66/debian/bluez.preinst @@ -48,7 +48,7 @@ # now that modprobe whines remove this old conffile, will be # http://bugs.debian.org/523050 base="/etc/modprobe.d/bluez" - rm_conffile "$base" + rm_conffile bluez "$base" if [ -e "$base.dpkg-bak" ]; then if [ -e "$base.conf" ]; then echo "$base.conf exists, not touching" diff -u bluez-4.66/debian/changelog bluez-4.66/debian/changelog --- bluez-4.66/debian/changelog +++ bluez-4.66/debian/changelog @@ -1,3 +1,35 @@ +bluez (4.66-2) testing; urgency=low + + * Update debian/bluez.bluetooth.init (Closes: #593172). + * Update debian/bluez.preinst (Closes: #592982, #568301). + * Backports some pathces from upstream. + - 0204-Fix-memory-leak.patch + Fix memory leak in hfp_ag_record function. + - 0206-Fix-missing-error-check-to-dbus_message_get_args.patch + Fix missing error check to dbus_message_get_args. + - 0207-Fix-attempt-to-use-a-potential-negative-array-index.patch + Fix attempt to use a potential negative array index. + - 0208-Fix-sdp_get_supp_feat-function.patch + Fix data allocation size to get in sdp_get_supp_feat. + - 0209-Fix-unblock-removed-device.patch + Fix unblock removed device. + - 0213-Fix-not-freeing-memory-on-driver-exit.patch + Fix not freeing memory on driver exit. + - 0214-Fix-possible-memory-leaks-on-ofono-driver.patch + Fix memory leak by add address check. + - 0215-Fix-not-cancelling-authentication-when-bonding-fails.patch + Fix not cancelling authentication when bonding fails + - 0217-Fix-sending-authentication-reply-when-bonding-is-alr.patch + When bonding is already completed, sending authentication reply. + - 0218-Fix-use-of-errno-after-calling-some-function-that-co.patch + Fix return erro code in device_authentication_requested function. + - 0227-core-fix-emitting-pairable-when-there-could-still-oc.patch + Move error check code. + - 0229-Fix-the-return-value-of-read_device_alias.patch + Fix the return value of read_device_alias function. + + -- Nobuhiro Iwamatsu Thu, 21 Oct 2010 17:57:43 +0900 + bluez (4.66-1) unstable; urgency=low * New upstream release. diff -u bluez-4.66/debian/bluez.bluetooth.init bluez-4.66/debian/bluez.bluetooth.init --- bluez-4.66/debian/bluez.bluetooth.init +++ bluez-4.66/debian/bluez.bluetooth.init @@ -39,6 +39,8 @@ SSD_OPTIONS="--oknodo --quiet --exec $DAEMON" +test -f /usr/sbin/bluetoothd || exit 0 + test -f /etc/default/bluetooth && . /etc/default/bluetooth test -f /etc/default/rcS && . /etc/default/rcS only in patch2: unchanged: --- bluez-4.66.orig/debian/patches/0208-Fix-sdp_get_supp_feat-function.patch +++ bluez-4.66/debian/patches/0208-Fix-sdp_get_supp_feat-function.patch @@ -0,0 +1,53 @@ +From 15b2bfd69b42c2b6a37916a7067a429491a0da95 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Elvis=20Pf=C3=BCtzenreuter?= +Date: Wed, 16 Jun 2010 13:30:48 -0300 +Subject: [PATCH 08/37] Fix sdp_get_supp_feat function + +In case of string data items, value is a pointer by itself. +--- + lib/sdp.c | 25 ++++++++++++++++++++++--- + 1 files changed, 22 insertions(+), 3 deletions(-) + +diff --git a/lib/sdp.c b/lib/sdp.c +index 79f4ae5..17745ac 100644 +--- a/lib/sdp.c ++++ b/lib/sdp.c +@@ -4769,13 +4769,32 @@ int sdp_get_supp_feat(const sdp_record_t *rec, sdp_list_t **seqp) + + if (d->dtd < SDP_SEQ8 || d->dtd > SDP_SEQ32) + goto fail; ++ + subseq = NULL; ++ + for (dd = d->val.dataseq; dd; dd = dd->next) { + sdp_data_t *data; +- if (dd->dtd != SDP_UINT8 && dd->dtd != SDP_UINT16 && +- dd->dtd != SDP_TEXT_STR8) ++ void *val; ++ int length; ++ ++ switch (dd->dtd) { ++ case SDP_URL_STR8: ++ case SDP_URL_STR16: ++ case SDP_TEXT_STR8: ++ case SDP_TEXT_STR16: ++ val = dd->val.str; ++ length = dd->unitSize - sizeof(uint8_t); ++ break; ++ case SDP_UINT8: ++ case SDP_UINT16: ++ val = &dd->val; ++ length = 0; ++ break; ++ default: + goto fail; +- data = sdp_data_alloc(dd->dtd, &dd->val); ++ } ++ ++ data = sdp_data_alloc_with_length(dd->dtd, val, length); + if (data) + subseq = sdp_list_append(subseq, data); + } +-- +1.7.2.3 + only in patch2: unchanged: --- bluez-4.66.orig/debian/patches/0207-Fix-attempt-to-use-a-potential-negative-array-index.patch +++ bluez-4.66/debian/patches/0207-Fix-attempt-to-use-a-potential-negative-array-index.patch @@ -0,0 +1,41 @@ +From 2e0d7c44ff32150c209cf7066dbeb34e464090e5 Mon Sep 17 00:00:00 2001 +From: Johan Hedberg +Date: Thu, 17 Jun 2010 23:20:33 +0300 +Subject: [PATCH 07/37] Fix attempt to use a potential negative array index + +--- + src/security.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/src/security.c b/src/security.c +index e8c463c..ca394e1 100644 +--- a/src/security.c ++++ b/src/security.c +@@ -377,11 +377,14 @@ static void link_key_notify(int dev, bdaddr_t *sba, void *ptr) + dev_id = hci_devid(sa); + if (dev_id < 0) + err = -errno; +- else ++ else { + err = hcid_dbus_link_key_notify(sba, dba, evt->link_key, + evt->key_type, + io_data[dev_id].pin_length, + old_key_type); ++ io_data[dev_id].pin_length = -1; ++ } ++ + if (err < 0) { + uint16_t handle; + +@@ -403,8 +406,6 @@ static void link_key_notify(int dev, bdaddr_t *sba, void *ptr) + DISCONNECT_CP_SIZE, &cp); + } + } +- +- io_data[dev_id].pin_length = -1; + } + + static void return_link_keys(int dev, bdaddr_t *sba, void *ptr) +-- +1.7.2.3 + only in patch2: unchanged: --- bluez-4.66.orig/debian/patches/0215-Fix-not-cancelling-authentication-when-bonding-fails.patch +++ bluez-4.66/debian/patches/0215-Fix-not-cancelling-authentication-when-bonding-fails.patch @@ -0,0 +1,189 @@ +From 8b78d14dd4ac9776f5848dee94ce2fcf976fd6d8 Mon Sep 17 00:00:00 2001 +From: Luiz Augusto von Dentz +Date: Mon, 28 Jun 2010 14:01:05 +0300 +Subject: [PATCH 15/37] Fix not cancelling authentication when bonding fails + +--- + src/dbus-hci.h | 2 - + src/device.c | 101 +++++++++++++++++++++++++------------------------------- + 2 files changed, 45 insertions(+), 58 deletions(-) + +diff --git a/src/dbus-hci.h b/src/dbus-hci.h +index a29dd53..44cd5e5 100644 +--- a/src/dbus-hci.h ++++ b/src/dbus-hci.h +@@ -50,8 +50,6 @@ gboolean get_adapter_and_device(bdaddr_t *src, bdaddr_t *dst, + struct btd_device **device, + gboolean create); + +-DBusMessage *new_authentication_return(DBusMessage *msg, uint8_t status); +- + const char *class_to_icon(uint32_t class); + + void set_dbus_connection(DBusConnection *conn); +diff --git a/src/device.c b/src/device.c +index d4ff131..781b6e2 100644 +--- a/src/device.c ++++ b/src/device.c +@@ -157,14 +157,6 @@ static uint16_t uuid_list[] = { + + static GSList *device_drivers = NULL; + +-static DBusHandlerResult error_connection_attempt_failed(DBusConnection *conn, +- DBusMessage *msg, int err) +-{ +- return error_common_reply(conn, msg, +- ERROR_INTERFACE ".ConnectionAttemptFailed", +- err > 0 ? strerror(err) : "Connection attempt failed"); +-} +- + static DBusHandlerResult error_failed(DBusConnection *conn, + DBusMessage *msg, const char * desc) + { +@@ -1744,7 +1736,7 @@ static gboolean start_discovery(gpointer user_data) + return FALSE; + } + +-DBusMessage *new_authentication_return(DBusMessage *msg, uint8_t status) ++static DBusMessage *new_authentication_return(DBusMessage *msg, int status) + { + switch (status) { + case 0x00: /* success */ +@@ -1902,59 +1894,25 @@ static gboolean bonding_io_cb(GIOChannel *io, GIOCondition cond, + gpointer user_data) + { + struct btd_device *device = user_data; +- DBusMessage *reply; +- +- if (!device->bonding) +- return FALSE; + +- reply = new_authentication_return(device->bonding->msg, +- HCI_CONNECTION_TERMINATED); +- g_dbus_send_message(device->bonding->conn, reply); +- +- bonding_request_free(device->bonding); ++ device->bonding->io_id = 0; ++ device_cancel_bonding(device, HCI_CONNECTION_TERMINATED); + + return FALSE; + } + +-static void bonding_connect_cb(GIOChannel *io, GError *err, gpointer user_data) ++static int device_authentication_requested(struct btd_device *device, ++ int handle) + { +- struct btd_device *device = user_data; + struct hci_request rq; + auth_requested_cp cp; + evt_cmd_status rp; + int dd; +- uint16_t handle; +- +- if (!device->bonding) { +- if (!err) +- g_io_channel_shutdown(io, TRUE, NULL); +- return; +- } +- +- if (err) { +- error("%s", err->message); +- error_connection_attempt_failed(device->bonding->conn, +- device->bonding->msg, +- ENETDOWN); +- goto cleanup; +- } +- +- if (!bt_io_get(io, BT_IO_L2RAW, &err, +- BT_IO_OPT_HANDLE, &handle, +- BT_IO_OPT_INVALID)) { +- error("Unable to get connection handle: %s", err->message); +- error_connection_attempt_failed(device->bonding->conn, +- device->bonding->msg, +- ENETDOWN); +- g_error_free(err); +- goto failed; +- } + + dd = hci_open_dev(adapter_get_dev_id(device->adapter)); + if (dd < 0) { +- DBusMessage *reply = no_such_adapter(device->bonding->msg); +- g_dbus_send_message(device->bonding->conn, reply); +- goto failed; ++ error("Unable to open adapter: %s(%d)", strerror(errno), errno); ++ return -errno; + } + + memset(&rp, 0, sizeof(rp)); +@@ -1974,22 +1932,53 @@ static void bonding_connect_cb(GIOChannel *io, GError *err, gpointer user_data) + if (hci_send_req(dd, &rq, HCI_REQ_TIMEOUT) < 0) { + error("Unable to send HCI request: %s (%d)", + strerror(errno), errno); +- error_failed_errno(device->bonding->conn, device->bonding->msg, +- errno); + hci_close_dev(dd); +- goto failed; ++ return -errno; + } + + if (rp.status) { + error("HCI_Authentication_Requested failed with status 0x%02x", + rp.status); +- error_failed_errno(device->bonding->conn, device->bonding->msg, +- bt_error(rp.status)); + hci_close_dev(dd); +- goto failed; ++ return rp.status; + } + ++ info("Authentication requested"); ++ + hci_close_dev(dd); ++ return 0; ++} ++ ++static void bonding_connect_cb(GIOChannel *io, GError *err, gpointer user_data) ++{ ++ struct btd_device *device = user_data; ++ uint16_t handle; ++ int status; ++ ++ if (!device->bonding) { ++ if (!err) ++ g_io_channel_shutdown(io, TRUE, NULL); ++ return; ++ } ++ ++ if (err) { ++ error("Unable to connect: %s", err->message); ++ status = HCI_CONNECTION_TERMINATED; ++ goto cleanup; ++ } ++ ++ if (!bt_io_get(io, BT_IO_L2RAW, &err, ++ BT_IO_OPT_HANDLE, &handle, ++ BT_IO_OPT_INVALID)) { ++ error("Unable to get connection handle: %s", err->message); ++ g_error_free(err); ++ status = -errno; ++ goto failed; ++ } ++ ++ status = device_authentication_requested(device, handle); ++ if (status != 0) ++ goto failed; + + device->bonding->io_id = g_io_add_watch(io, + G_IO_NVAL | G_IO_HUP | G_IO_ERR, +@@ -2002,7 +1991,7 @@ failed: + + cleanup: + device->bonding->io_id = 0; +- bonding_request_free(device->bonding); ++ device_cancel_bonding(device, status); + } + + static void create_bond_req_exit(DBusConnection *conn, void *user_data) +-- +1.7.2.3 + only in patch2: unchanged: --- bluez-4.66.orig/debian/patches/0214-Fix-possible-memory-leaks-on-ofono-driver.patch +++ bluez-4.66/debian/patches/0214-Fix-possible-memory-leaks-on-ofono-driver.patch @@ -0,0 +1,30 @@ +From 2a6500b516bb7c864f810cb4bba7584bf24a246a Mon Sep 17 00:00:00 2001 +From: Luiz Augusto von Dentz +Date: Tue, 8 Jun 2010 11:20:15 +0300 +Subject: [PATCH 14/37] Fix possible memory leaks on ofono driver + +--- + audio/telephony-ofono.c | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/audio/telephony-ofono.c b/audio/telephony-ofono.c +index e710ce8..9c20112 100644 +--- a/audio/telephony-ofono.c ++++ b/audio/telephony-ofono.c +@@ -598,8 +598,11 @@ static void list_modem_reply(DBusPendingCall *call, void *user_data) + + dbus_message_iter_get_basic(&sub, &modem_obj_path_local); + modem_obj_path = g_strdup(modem_obj_path_local); +- DBG("modem_obj_path is %p, %s\n", modem_obj_path, +- modem_obj_path); ++ if (modem_obj_path != NULL) { ++ DBG("modem_obj_path is %p, %s\n", modem_obj_path, ++ modem_obj_path); ++ break; ++ } + dbus_message_iter_next(&sub); + } + +-- +1.7.2.3 + only in patch2: unchanged: --- bluez-4.66.orig/debian/patches/0227-core-fix-emitting-pairable-when-there-could-still-oc.patch +++ bluez-4.66/debian/patches/0227-core-fix-emitting-pairable-when-there-could-still-oc.patch @@ -0,0 +1,57 @@ +From b5d5bf263f4034ed9e7d40500ad8815b8e45cc8c Mon Sep 17 00:00:00 2001 +From: Luiz Augusto von Dentz +Date: Wed, 30 Jun 2010 18:22:35 +0300 +Subject: [PATCH 27/37] core: fix emitting pairable when there could still occur an error + +An error could be generate by set_mode which then will make application +to assume that we were unable to change the property, which wasn't the +case. +--- + src/adapter.c | 24 +++++++++++++----------- + 1 files changed, 13 insertions(+), 11 deletions(-) + +diff --git a/src/adapter.c b/src/adapter.c +index 5d90b46..d1fae55 100644 +--- a/src/adapter.c ++++ b/src/adapter.c +@@ -521,6 +521,19 @@ static DBusMessage *set_pairable(DBusConnection *conn, DBusMessage *msg, + if (pairable == adapter->pairable) + goto done; + ++ if (!(adapter->scan_mode & SCAN_INQUIRY)) ++ goto store; ++ ++ mode = (pairable && adapter->discov_timeout > 0 && ++ adapter->discov_timeout <= 60) ? ++ MODE_LIMITED : MODE_DISCOVERABLE; ++ ++ err = set_mode(adapter, mode); ++ if (err < 0 && msg) ++ return failed_strerror(msg, -err); ++ ++store: ++ + adapter->pairable = pairable; + + write_device_pairable(&adapter->bdaddr, pairable); +@@ -533,17 +546,6 @@ static DBusMessage *set_pairable(DBusConnection *conn, DBusMessage *msg, + adapter_set_pairable_timeout(adapter, + adapter->pairable_timeout); + +- if (!(adapter->scan_mode & SCAN_INQUIRY)) +- goto done; +- +- mode = (pairable && adapter->discov_timeout > 0 && +- adapter->discov_timeout <= 60) ? +- MODE_LIMITED : MODE_DISCOVERABLE; +- +- err = set_mode(adapter, mode); +- if (err < 0 && msg) +- return failed_strerror(msg, -err); +- + done: + return msg ? dbus_message_new_method_return(msg) : NULL; + } +-- +1.7.2.3 + only in patch2: unchanged: --- bluez-4.66.orig/debian/patches/0204-Fix-memory-leak.patch +++ bluez-4.66/debian/patches/0204-Fix-memory-leak.patch @@ -0,0 +1,36 @@ +From b336e93a471f4ede121edaf822cd525c2ffc17a7 Mon Sep 17 00:00:00 2001 +From: Johan Hedberg +Date: Thu, 17 Jun 2010 09:40:56 +0300 +Subject: [PATCH 04/37] Fix memory leak + +--- + audio/manager.c | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +diff --git a/audio/manager.c b/audio/manager.c +index f6a98cd..5edfb18 100644 +--- a/audio/manager.c ++++ b/audio/manager.c +@@ -351,12 +351,18 @@ static sdp_record_t *hfp_ag_record(uint8_t ch, uint32_t feat) + sdp_data_t *channel, *features; + uint8_t netid = 0x01; + uint16_t sdpfeat; +- sdp_data_t *network = sdp_data_alloc(SDP_UINT8, &netid); ++ sdp_data_t *network; + + record = sdp_record_alloc(); + if (!record) + return NULL; + ++ network = sdp_data_alloc(SDP_UINT8, &netid); ++ if (!network) { ++ sdp_record_free(record); ++ return NULL; ++ } ++ + sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP); + root = sdp_list_append(0, &root_uuid); + sdp_set_browse_groups(record, root); +-- +1.7.2.3 + only in patch2: unchanged: --- bluez-4.66.orig/debian/patches/0218-Fix-use-of-errno-after-calling-some-function-that-co.patch +++ bluez-4.66/debian/patches/0218-Fix-use-of-errno-after-calling-some-function-that-co.patch @@ -0,0 +1,42 @@ +From 52248c856d1727f0e19fec757bf02508c03832da Mon Sep 17 00:00:00 2001 +From: Luiz Augusto von Dentz +Date: Tue, 29 Jun 2010 15:26:22 +0300 +Subject: [PATCH 18/37] Fix use of errno after calling some function that could overwrite it + +--- + src/device.c | 10 ++++++---- + 1 files changed, 6 insertions(+), 4 deletions(-) + +diff --git a/src/device.c b/src/device.c +index ea0640e..6af76d1 100644 +--- a/src/device.c ++++ b/src/device.c +@@ -1891,8 +1891,9 @@ static int device_authentication_requested(struct btd_device *device, + + dd = hci_open_dev(adapter_get_dev_id(device->adapter)); + if (dd < 0) { +- error("Unable to open adapter: %s(%d)", strerror(errno), errno); +- return -errno; ++ int err = -errno; ++ error("Unable to open adapter: %s(%d)", strerror(-err), -err); ++ return err; + } + + memset(&rp, 0, sizeof(rp)); +@@ -1910,10 +1911,11 @@ static int device_authentication_requested(struct btd_device *device, + rq.event = EVT_CMD_STATUS; + + if (hci_send_req(dd, &rq, HCI_REQ_TIMEOUT) < 0) { ++ int err = -errno; + error("Unable to send HCI request: %s (%d)", +- strerror(errno), errno); ++ strerror(-err), -err); + hci_close_dev(dd); +- return -errno; ++ return err; + } + + if (rp.status) { +-- +1.7.2.3 + only in patch2: unchanged: --- bluez-4.66.orig/debian/patches/0206-Fix-missing-error-check-to-dbus_message_get_args.patch +++ bluez-4.66/debian/patches/0206-Fix-missing-error-check-to-dbus_message_get_args.patch @@ -0,0 +1,31 @@ +From b2d85659223b628d17bb5f69e00d6f514761cba6 Mon Sep 17 00:00:00 2001 +From: Johan Hedberg +Date: Thu, 17 Jun 2010 21:31:32 +0300 +Subject: [PATCH 06/37] Fix missing error check to dbus_message_get_args + +--- + audio/telephony-maemo6.c | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/audio/telephony-maemo6.c b/audio/telephony-maemo6.c +index 41950be..e8b75fd 100644 +--- a/audio/telephony-maemo6.c ++++ b/audio/telephony-maemo6.c +@@ -1311,9 +1311,12 @@ static void hal_battery_level_reply(DBusPendingCall *call, void *user_data) + goto done; + } + +- dbus_message_get_args(reply, NULL, ++ if (!dbus_message_get_args(reply, NULL, + DBUS_TYPE_INT32, &level, +- DBUS_TYPE_INVALID); ++ DBUS_TYPE_INVALID)) { ++ error("Unexpected args in hald reply"); ++ goto done; ++ } + + *value = (int) level; + +-- +1.7.2.3 + only in patch2: unchanged: --- bluez-4.66.orig/debian/patches/0229-Fix-the-return-value-of-read_device_alias.patch +++ bluez-4.66/debian/patches/0229-Fix-the-return-value-of-read_device_alias.patch @@ -0,0 +1,27 @@ +From e4648f70c8228eac9854ed1a2c0dc398dfb777a4 Mon Sep 17 00:00:00 2001 +From: Vinicius Costa Gomes +Date: Fri, 2 Jul 2010 13:09:07 -0300 +Subject: [PATCH 29/37] Fix the return value of read_device_alias + +To mantain consistency read_device_alias must return 0 on +success, not the number of bytes written. +--- + src/storage.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/storage.c b/src/storage.c +index 07c1ac2..e09e257 100644 +--- a/src/storage.c ++++ b/src/storage.c +@@ -73,7 +73,7 @@ int read_device_alias(const char *src, const char *dst, char *alias, size_t size + + free(tmp); + +- return err; ++ return err < 0 ? -EIO : 0; + } + + int write_device_alias(const char *src, const char *dst, const char *alias) +-- +1.7.2.3 + only in patch2: unchanged: --- bluez-4.66.orig/debian/patches/0217-Fix-sending-authentication-reply-when-bonding-is-alr.patch +++ bluez-4.66/debian/patches/0217-Fix-sending-authentication-reply-when-bonding-is-alr.patch @@ -0,0 +1,36 @@ +From 4a4471e7e071fe8e8ae68d1b130dac6db9748fe2 Mon Sep 17 00:00:00 2001 +From: Luiz Augusto von Dentz +Date: Mon, 28 Jun 2010 11:20:15 +0300 +Subject: [PATCH 17/37] Fix sending authentication reply when bonding is already completed + +It cause errors such: + +2010-06-28 11:12:39.683799 > HCI Event: Auth Complete (0x06) plen 3 + status 0x05 handle 43 + Error: Authentication Failure +2010-06-28 11:12:39.699344 < HCI Command: User Confirmation Request + Negative Reply (0x01|0x002d) plen 6 + bdaddr 00:25:56:D0:7F:63 +2010-06-28 11:12:39.705754 > HCI Event: Command Complete (0x0e) plen 10 + User Confirmation Request Negative Reply (0x01|0x002d) ncmd 1 + status 0x0c bdaddr 00:25:56:D0:7F:63 + Error: Command Disallowed +--- + src/device.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/src/device.c b/src/device.c +index 04332c6..ea0640e 100644 +--- a/src/device.c ++++ b/src/device.c +@@ -2075,6 +2075,7 @@ void device_bonding_complete(struct btd_device *device, uint8_t status) + agent_cancel(auth->agent); + + if (status) { ++ device_cancel_authentication(device, TRUE); + device_cancel_bonding(device, status); + return; + } +-- +1.7.2.3 + only in patch2: unchanged: --- bluez-4.66.orig/debian/patches/0209-Fix-unblock-removed-device.patch +++ bluez-4.66/debian/patches/0209-Fix-unblock-removed-device.patch @@ -0,0 +1,73 @@ +From e0eddab0745f605fba545d03e84ed13769d744c8 Mon Sep 17 00:00:00 2001 +From: Daniel Orstadius +Date: Mon, 28 Jun 2010 13:45:37 +0300 +Subject: [PATCH 09/37] Fix unblock removed device + +Unblocks a device when removing it. Adds boolean argument to +function device_unblock to only emit property changed signal and +probe drivers when unblocking a device if the device is not +unblocked as part of being removed. +--- + src/device.c | 17 ++++++++++++----- + 1 files changed, 12 insertions(+), 5 deletions(-) + +diff --git a/src/device.c b/src/device.c +index 11b1fd2..73243c9 100644 +--- a/src/device.c ++++ b/src/device.c +@@ -513,7 +513,8 @@ static int device_block(DBusConnection *conn, struct btd_device *device) + return 0; + } + +-static int device_unblock(DBusConnection *conn, struct btd_device *device) ++static int device_unblock(DBusConnection *conn, struct btd_device *device, ++ gboolean silent) + { + int dev_id, dd, err; + bdaddr_t src; +@@ -543,10 +544,12 @@ static int device_unblock(DBusConnection *conn, struct btd_device *device) + if (err < 0) + error("write_blocked(): %s (%d)", strerror(-err), -err); + +- emit_property_changed(conn, device->path, DEVICE_INTERFACE, "Blocked", ++ if (!silent) { ++ emit_property_changed(conn, device->path, ++ DEVICE_INTERFACE, "Blocked", + DBUS_TYPE_BOOLEAN, &device->blocked); +- +- device_probe_drivers(device, device->uuids); ++ device_probe_drivers(device, device->uuids); ++ } + + return 0; + } +@@ -560,7 +563,7 @@ static DBusMessage *set_blocked(DBusConnection *conn, DBusMessage *msg, + if (value) + err = device_block(conn, device); + else +- err = device_unblock(conn, device); ++ err = device_unblock(conn, device, FALSE); + + switch (-err) { + case 0: +@@ -1100,6 +1103,7 @@ static void device_remove_stored(struct btd_device *device) + { + bdaddr_t src; + char addr[18]; ++ DBusConnection *conn = get_dbus_connection(); + + adapter_get_address(device->adapter, &src); + ba2str(&device->bdaddr, addr); +@@ -1109,6 +1113,9 @@ static void device_remove_stored(struct btd_device *device) + delete_entry(&src, "profiles", addr); + delete_entry(&src, "trusts", addr); + delete_all_records(&src, &device->bdaddr); ++ ++ if (device->blocked) ++ device_unblock(conn, device, TRUE); + } + + void device_remove(struct btd_device *device, gboolean remove_stored) +-- +1.7.2.3 + only in patch2: unchanged: --- bluez-4.66.orig/debian/patches/0213-Fix-not-freeing-memory-on-driver-exit.patch +++ bluez-4.66/debian/patches/0213-Fix-not-freeing-memory-on-driver-exit.patch @@ -0,0 +1,29 @@ +From ef1e62baec7833bd4a53720d1ee2bdcd91e6a705 Mon Sep 17 00:00:00 2001 +From: Luiz Augusto von Dentz +Date: Tue, 8 Jun 2010 10:48:24 +0300 +Subject: [PATCH 13/37] Fix not freeing memory on driver exit + +--- + audio/telephony-maemo6.c | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/audio/telephony-maemo6.c b/audio/telephony-maemo6.c +index e8b75fd..31704c3 100644 +--- a/audio/telephony-maemo6.c ++++ b/audio/telephony-maemo6.c +@@ -1981,6 +1981,12 @@ int telephony_init(void) + + void telephony_exit(void) + { ++ g_free(net.operator_name); ++ net.operator_name = NULL; ++ ++ g_free(last_dialed_number); ++ last_dialed_number = NULL; ++ + g_slist_foreach(calls, (GFunc) csd_call_free, NULL); + g_slist_free(calls); + calls = NULL; +-- +1.7.2.3 +