diff options
Diffstat (limited to 'input/device.c')
| -rw-r--r-- | input/device.c | 68 | 
1 files changed, 22 insertions, 46 deletions
diff --git a/input/device.c b/input/device.c index d3f07cf5..99c462c8 100644 --- a/input/device.c +++ b/input/device.c @@ -59,11 +59,6 @@  #define UPDOWN_ENABLED		1 -struct pending_connect { -	DBusConnection *conn; -	DBusMessage *msg; -}; -  struct fake_input {  	GIOChannel	*io;  	int		rfcomm; /* RFCOMM socket */ @@ -80,7 +75,7 @@ struct device {  	uint16_t		product;  	uint16_t		vendor;  	struct fake_input	*fake; -	struct pending_connect *pending_connect; /* FIXME: use only the msg */ +	DBusMessage		*pending_connect;  	DBusConnection		*conn;  	char			*path;  	int			ctrl_sk; @@ -110,17 +105,6 @@ static struct device *device_new(bdaddr_t *src, bdaddr_t *dst)  	return idev;  } -static void pending_connect_free(struct pending_connect *pc) -{ -	if (!pc) -		return; -	if (pc->conn) -		dbus_connection_unref(pc->conn); -	if (pc->msg) -		dbus_message_unref(pc->msg); -	g_free(pc); -} -  static void device_free(struct device *idev)  {  	if (!idev) @@ -129,12 +113,11 @@ static void device_free(struct device *idev)  		g_free(idev->name);  	if (idev->fake)  		g_free(idev->fake); -	if (idev->pending_connect) -		pending_connect_free(idev->pending_connect);  	if (idev->path)  		g_free(idev->path); +	if (idev->pending_connect) +		dbus_message_unref(idev->pending_connect);  	dbus_connection_unref(idev->conn); -  	g_free(idev);  } @@ -423,24 +406,24 @@ static gboolean rfcomm_connect_cb(GIOChannel *chan,  						(GIOFunc) rfcomm_io_cb, fake);  	/* Replying to the requestor */ -	reply = dbus_message_new_method_return(idev->pending_connect->msg); -	send_message_and_unref(idev->pending_connect->conn, reply); +	reply = dbus_message_new_method_return(idev->pending_connect); +	send_message_and_unref(idev->conn, reply);  	/* Sending the Connected signal */ -	path = dbus_message_get_path(idev->pending_connect->msg); -	dbus_connection_emit_signal(idev->pending_connect->conn, path, +	path = dbus_message_get_path(idev->pending_connect); +	dbus_connection_emit_signal(idev->conn, path,  			INPUT_DEVICE_INTERFACE, "Connected",  			DBUS_TYPE_INVALID);  -	pending_connect_free(idev->pending_connect); +	dbus_message_unref(idev->pending_connect);  	idev->pending_connect = NULL;  	return FALSE;  failed: -	err_connection_failed(idev->pending_connect->conn, -			idev->pending_connect->msg, strerror(err)); -	pending_connect_free(idev->pending_connect); +	err_connection_failed(idev->conn, +			idev->pending_connect, strerror(err)); +	dbus_message_unref(idev->pending_connect);  	idev->pending_connect = NULL;  	g_io_channel_close(chan); @@ -648,13 +631,13 @@ static gboolean interrupt_connect_cb(GIOChannel *chan,  			DBUS_TYPE_INVALID);  	/* Replying to the requestor */ -	send_message_and_unref(idev->pending_connect->conn, -		dbus_message_new_method_return(idev->pending_connect->msg)); +	send_message_and_unref(idev->conn, +		dbus_message_new_method_return(idev->pending_connect));  	goto cleanup;  failed: -	err_connection_failed(idev->pending_connect->conn, -				idev->pending_connect->msg, strerror(err)); +	err_connection_failed(idev->conn, +		idev->pending_connect, strerror(err));  	if (isk > 0)  		close(isk);  	close(idev->ctrl_sk); @@ -662,7 +645,7 @@ failed:  	idev->ctrl_sk = -1;  cleanup: -	pending_connect_free(idev->pending_connect); +	dbus_message_unref(idev->pending_connect);  	idev->pending_connect = NULL;  	return FALSE; @@ -720,9 +703,9 @@ failed:  		close(csk);  	idev->ctrl_sk = -1; -	err_connection_failed(idev->pending_connect->conn, -			idev->pending_connect->msg, strerror(err)); -	pending_connect_free(idev->pending_connect); +	err_connection_failed(idev->conn, +			idev->pending_connect, strerror(err)); +	dbus_message_unref(idev->pending_connect);  	idev->pending_connect = NULL;  	return FALSE; @@ -848,21 +831,14 @@ static DBusHandlerResult device_connect(DBusConnection *conn,  	if (is_connected(idev))  		return err_already_connected(conn, msg); -	idev->pending_connect = g_try_new0(struct pending_connect, 1); -	if (!idev->pending_connect) { -		error("Out of memory when allocating new struct pending_connect"); -		return DBUS_HANDLER_RESULT_NEED_MEMORY; -	} - -	idev->pending_connect->conn = dbus_connection_ref(conn); -	idev->pending_connect->msg = dbus_message_ref(msg); +	idev->pending_connect = dbus_message_ref(msg);  	/* Fake input device */  	if (idev->fake) {  		if (rfcomm_connect(idev) < 0) {  			const char *str = strerror(errno);  			error("RFCOMM connect failed: %s(%d)", str, errno); -			pending_connect_free(idev->pending_connect); +			dbus_message_unref(idev->pending_connect);  			idev->pending_connect = NULL;  			return err_connection_failed(conn, msg, str);  		} @@ -875,7 +851,7 @@ static DBusHandlerResult device_connect(DBusConnection *conn,  		int err = errno;  		error("L2CAP connect failed: %s(%d)", strerror(err), err); -		pending_connect_free(idev->pending_connect); +		dbus_message_unref(idev->pending_connect);  		idev->pending_connect = NULL;  		return err_connection_failed(conn, msg, strerror(err));  	}  | 
