static void session_free(struct session_data *session) { DBG("%p", session); if (session->agent) agent_release(session); if (session->watch) g_dbus_remove_watch(session->conn, session->watch); if (session->obex != NULL) gw_obex_close(session->obex); if (session->io != NULL) { g_io_channel_shutdown(session->io, TRUE, NULL); g_io_channel_unref(session->io); } if (session->path) session_unregistered(session); if (session->conn) { dbus_connection_unref(session->conn); } g_free(session->callback); g_free(session->path); g_free(session->owner); g_free(session); }
static void session_free(struct obc_session *session) { GSList *l = session->pending_calls; DBG("%p", session); while (l) { struct pending_req *req = l->data; l = l->next; session->pending_calls = g_slist_remove(session->pending_calls, req); pending_req_finalize(req); } if (session->agent) { obc_agent_release(session->agent); obc_agent_free(session->agent); } if (session->watch) g_dbus_remove_watch(session->conn, session->watch); if (session->obex != NULL) gw_obex_close(session->obex); if (session->io != NULL) { g_io_channel_shutdown(session->io, TRUE, NULL); g_io_channel_unref(session->io); } if (session->path) session_unregistered(session); if (session->conn) dbus_connection_unref(session->conn); if (session->conn_system) dbus_connection_unref(session->conn_system); sessions = g_slist_remove(sessions, session); g_free(session->adapter); g_free(session->callback); g_free(session->path); g_free(session->owner); g_free(session); }
void obc_session_shutdown(struct obc_session *session) { struct pending_request *p; GError *err; DBG("%p", session); obc_session_ref(session); /* Unregister any pending transfer */ err = g_error_new(OBEX_IO_ERROR, OBEX_IO_DISCONNECTED, "Session closed by user"); if (session->p != NULL && session->p->id != 0) { p = session->p; session->p = NULL; if (p->func) p->func(session, p->transfer, err, p->data); pending_request_free(p); } while ((p = g_queue_pop_head(session->queue))) { if (p->func) p->func(session, p->transfer, err, p->data); pending_request_free(p); } g_error_free(err); /* Unregister interfaces */ if (session->path) session_unregistered(session); /* Disconnect transport */ if (session->id > 0 && session->transport != NULL) { session->transport->disconnect(session->id); session->id = 0; } obc_session_unref(session); }
static void session_free(struct obc_session *session) { DBG("%p", session); if (session->process_id != 0) g_source_remove(session->process_id); if (session->queue) { g_queue_foreach(session->queue, (GFunc) pending_request_free, NULL); g_queue_free(session->queue); } if (session->watch) g_dbus_remove_watch(session->conn, session->watch); if (session->obex) { g_obex_set_disconnect_function(session->obex, NULL, NULL); g_obex_unref(session->obex); } if (session->id > 0 && session->transport != NULL) session->transport->disconnect(session->id); if (session->path) session_unregistered(session); if (session->conn) dbus_connection_unref(session->conn); if (session->p) pending_request_free(session->p); g_free(session->path); g_free(session->owner); g_free(session->source); g_free(session->destination); g_free(session->folder); g_free(session); }
void obc_session_shutdown(struct obc_session *session) { DBG("%p", session); obc_session_ref(session); /* Unregister any pending transfer */ g_slist_foreach(session->pending, (GFunc) obc_transfer_unregister, NULL); /* Unregister interfaces */ if (session->path) session_unregistered(session); /* Shutdown io */ if (session->io) { int fd = g_io_channel_unix_get_fd(session->io); shutdown(fd, SHUT_RDWR); } obc_session_unref(session); }
void obc_session_shutdown(struct obc_session *session) { struct pending_request *p; GError *err; DBG("%p", session); if (session->disconnecting == TRUE) { DBG("%p already disconnecting", session); return; } session->disconnecting = TRUE; obc_session_ref(session); /* Unregister any pending transfer */ err = g_error_new(OBEX_IO_ERROR, OBEX_IO_DISCONNECTED, "Session closed by user"); if (session->p != NULL && session->p->id != 0) { p = session->p; session->p = NULL; if (p->func) p->func(session, p->transfer, err, p->data); pending_request_free(p); } while ((p = g_queue_pop_head(session->queue))) { if (p->func) p->func(session, p->transfer, err, p->data); pending_request_free(p); } g_error_free(err); /* Unregister interfaces */ if (session->path) session_unregistered(session); DBG("Checking the need for disconnect request"); /* Send a disconnect request and wait for reply */ if (session->id > 0 && session->transport != NULL && session->obex != NULL) { DBG("Generating disconnect request. "); err = NULL; p = pending_request_new(session, NULL, NULL, NULL); p->req_id = g_obex_disconnect(session->obex, disconnect_cb, p, &err); if (err != NULL) { DBG("Generating disconnect request failed. "); disconnect_cb(session->obex, NULL, NULL, p); } else { /* Finalize when reply arrives */ DBG("Generating disconnect request succeeded. "); } } else { DBG("Unreferring without disconnect request."); obc_session_unref(session); } }