Diff between 45a70b63e0610b51ee2039af99c4aa678fbd20bc and 523fc92b8d6325319349b8a2d98cb762f1965a96

Changed Files

File Additions Deletions Status
src/adapter.c +9 -2 modified
src/agent.c +0 -5 modified
src/agent.h +0 -1 modified

Full Patch

diff --git a/src/adapter.c b/src/adapter.c
index f286bbd..db8a737 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -7028,13 +7028,20 @@ static void read_info_complete(uint8_t status, uint16_t length,
 		if (!(adapter->current_settings & MGMT_SETTING_PAIRABLE))
 			set_mode(adapter, MGMT_OP_SET_PAIRABLE, 0x01);
 	} else {
+		struct agent *agent = agent_get(NULL);
+
 		if (adapter->current_settings & MGMT_SETTING_PAIRABLE) {
-			if (!agent_default_available())
+			if (!agent)
 				set_mode(adapter, MGMT_OP_SET_PAIRABLE, 0x00);
 		} else {
-			if (agent_default_available())
+			if (agent)
 				set_mode(adapter, MGMT_OP_SET_PAIRABLE, 0x01);
 		}
+
+		if (agent) {
+			agent_unref(agent);
+			agent = NULL;
+		}
 	}
 
 	if (!kernel_conn_control)
diff --git a/src/agent.c b/src/agent.c
index af96528..70786c3 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -261,11 +261,6 @@ void agent_unref(struct agent *agent)
 	g_free(agent);
 }
 
-bool agent_default_available(void)
-{
-	return !queue_isempty(default_agents);
-}
-
 struct agent *agent_get(const char *owner)
 {
 	struct agent *agent;
diff --git a/src/agent.h b/src/agent.h
index de6db2c..1e46920 100644
--- a/src/agent.h
+++ b/src/agent.h
@@ -36,7 +36,6 @@ typedef void (*agent_passkey_cb) (struct agent *agent, DBusError *err,
 struct agent *agent_ref(struct agent *agent);
 void agent_unref(struct agent *agent);
 
-bool agent_default_available(void);
 struct agent *agent_get(const char *owner);
 
 int agent_authorize_service(struct agent *agent, const char *path,