Skip to content

Commit

Permalink
[Linux] Mark GLib source as removed when exiting callback
Browse files Browse the repository at this point in the history
  • Loading branch information
arkq committed Sep 27, 2022
1 parent f2cd15f commit 47c853f
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/platform/Linux/bluez/Helper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,16 @@ static gboolean BluezCharacteristicWriteFD(GIOChannel * aChannel, GIOCondition a
isSuccess = true;

exit:
return isSuccess ? TRUE : FALSE;
if (!isSuccess && (conn != nullptr))
{
// Returning G_SOURCE_REMOVE from the source callback removes the source
// object from the context. In order not to trigger GLib critical warning
// when manually removing the source in BluezOTConnectionDestroy() unset
// self source ID tag.
conn->mC1Channel.mWatch = 0;
}

return isSuccess ? G_SOURCE_CONTINUE : G_SOURCE_REMOVE;
}

static void Bluez_gatt_characteristic1_complete_acquire_write_with_fd(GDBusMethodInvocation * invocation, int fd, guint16 mtu)
Expand All @@ -417,6 +426,7 @@ static void Bluez_gatt_characteristic1_complete_acquire_write_with_fd(GDBusMetho

static gboolean bluezCharacteristicDestroyFD(GIOChannel * aChannel, GIOCondition aCond, gpointer apClosure)
{
conn->mC2Channel.mWatch = 0;
return G_SOURCE_REMOVE;
}

Expand Down

0 comments on commit 47c853f

Please sign in to comment.