summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2023-04-12 14:58:59 +0200
committerAleksander Morgado <aleksander@aleksander.es>2023-04-12 14:58:59 +0200
commit9c5989f116a2c430ac8e1a9b2a0a17e7a05d4798 (patch)
tree1ccf1fb892938a99647b233b4ed8f12c6bf6e7bc
parent42048cb2fc441f738e697247cbafb7b49d4de498 (diff)
downloadModemManager-9c5989f116a2c430ac8e1a9b2a0a17e7a05d4798.tar.gz
port-serial: close_force() may dispose the last object reference
-rw-r--r--src/mm-port-serial.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/mm-port-serial.c b/src/mm-port-serial.c
index 6b43858f4..5053e8cc8 100644
--- a/src/mm-port-serial.c
+++ b/src/mm-port-serial.c
@@ -943,7 +943,14 @@ common_input_available (MMPortSerial *self,
mm_obj_dbg (self, "unexpected port hangup!");
if (self->priv->response->len)
g_byte_array_remove_range (self->priv->response, 0, self->priv->response->len);
- port_serial_close_force (self);
+ /* The completion of the commands with an error may end up fully disposing the
+ * serial port object. In order to cope with that, we make sure we have
+ * our own reference to the object while the close runs. */
+ g_object_ref (self);
+ {
+ port_serial_close_force (self);
+ }
+ g_object_unref (self);
return G_SOURCE_REMOVE;
}