[fix] fix crash when a device disappears from network
This commit is contained in:
@@ -103,7 +103,7 @@ static void browse_callback(
|
||||
case AVAHI_BROWSER_REMOVE:
|
||||
fprintf(stderr, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'\n", name, type, domain);
|
||||
//teleport_app_remove_peer(name);
|
||||
teleport_peer_remove_peer(peerList, g_strdup(name));
|
||||
teleport_peer_remove_peer_by_name(peerList, g_strdup(name));
|
||||
break;
|
||||
case AVAHI_BROWSER_ALL_FOR_NOW:
|
||||
case AVAHI_BROWSER_CACHE_EXHAUSTED:
|
||||
|
||||
@@ -98,11 +98,11 @@ void teleport_peer_add_peer (TeleportPeer *self, gchar * name, gchar * ip, gint
|
||||
|
||||
void teleport_peer_remove_peer (TeleportPeer *self, Peer *device)
|
||||
{
|
||||
Peer element;
|
||||
Peer *element;
|
||||
gboolean found = FALSE;
|
||||
//Maybe I could just compare the addresses
|
||||
for (int i = 0; i < self->list->len && !found; i++) {
|
||||
Peer *element = g_array_index(self->list, Peer *, i);
|
||||
element = g_array_index(self->list, Peer *, i);
|
||||
if (g_strcmp0(element->name, device->name) == 0) {
|
||||
found = TRUE;
|
||||
g_array_remove_index(self->list, i);
|
||||
@@ -111,3 +111,18 @@ void teleport_peer_remove_peer (TeleportPeer *self, Peer *device)
|
||||
g_signal_emit (self, signalIds[REMOVE], 0, device);
|
||||
}
|
||||
|
||||
void teleport_peer_remove_peer_by_name (TeleportPeer *self, gchar *name)
|
||||
{
|
||||
|
||||
g_print("Remove this device %s", name);
|
||||
Peer *element;
|
||||
gboolean found = FALSE;
|
||||
for (int i = 0; i < self->list->len && !found; i++) {
|
||||
element = g_array_index(self->list, Peer *, i);
|
||||
if (g_strcmp0(element->name, name) == 0) {
|
||||
found = TRUE;
|
||||
g_array_remove_index(self->list, i);
|
||||
}
|
||||
}
|
||||
g_signal_emit (self, signalIds[REMOVE], 0, element);
|
||||
}
|
||||
|
||||
@@ -18,5 +18,6 @@ gchar* teleport_peer_get_ip (TeleportPeer *self, gint index, GError **error);
|
||||
gint teleport_peer_get_port (TeleportPeer *self, gint index, GError **error);
|
||||
void teleport_peer_add_peer (TeleportPeer *self, gchar * name, gchar * ip, gint port);
|
||||
void teleport_peer_remove_peer (TeleportPeer *, Peer *);
|
||||
void teleport_peer_remove_peer_by_name (TeleportPeer *, gchar *);
|
||||
|
||||
#endif /* __TELEPORTPEER_H */
|
||||
|
||||
Reference in New Issue
Block a user