[fix] fix crash when a device disappears from network

This commit is contained in:
Julian Sparber
2017-09-03 17:19:37 +02:00
parent 6fe0756cd6
commit d929447d5f
3 changed files with 19 additions and 3 deletions

View File

@@ -103,7 +103,7 @@ static void browse_callback(
case AVAHI_BROWSER_REMOVE: case AVAHI_BROWSER_REMOVE:
fprintf(stderr, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'\n", name, type, domain); fprintf(stderr, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'\n", name, type, domain);
//teleport_app_remove_peer(name); //teleport_app_remove_peer(name);
teleport_peer_remove_peer(peerList, g_strdup(name)); teleport_peer_remove_peer_by_name(peerList, g_strdup(name));
break; break;
case AVAHI_BROWSER_ALL_FOR_NOW: case AVAHI_BROWSER_ALL_FOR_NOW:
case AVAHI_BROWSER_CACHE_EXHAUSTED: case AVAHI_BROWSER_CACHE_EXHAUSTED:

View File

@@ -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) void teleport_peer_remove_peer (TeleportPeer *self, Peer *device)
{ {
Peer element; Peer *element;
gboolean found = FALSE; gboolean found = FALSE;
//Maybe I could just compare the addresses //Maybe I could just compare the addresses
for (int i = 0; i < self->list->len && !found; i++) { 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) { if (g_strcmp0(element->name, device->name) == 0) {
found = TRUE; found = TRUE;
g_array_remove_index(self->list, i); 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); 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);
}

View File

@@ -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); 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_add_peer (TeleportPeer *self, gchar * name, gchar * ip, gint port);
void teleport_peer_remove_peer (TeleportPeer *, Peer *); void teleport_peer_remove_peer (TeleportPeer *, Peer *);
void teleport_peer_remove_peer_by_name (TeleportPeer *, gchar *);
#endif /* __TELEPORTPEER_H */ #endif /* __TELEPORTPEER_H */