obj->factory = NULL;
obj->resolution = 0;
obj->multisink = SCMIRRORING_MULTISINK_ENABLE;
+ obj->source_id = 0;
obj->coupling_mode = FALSE;
}
klass = MIRACAST_SERVER_GET_CLASS(server);
void *pool = NULL;
- int i;
int ret = 0;
- int serv_ref_cnt = 0;
if (server->server == NULL) {
scmirroring_error("server is already NULL");
g_object_unref(pool);
}
- serv_ref_cnt = GST_OBJECT_REFCOUNT_VALUE(server->server);
- scmirroring_debug("serv ref cnt:%d", serv_ref_cnt);
+ if (server->source_id > 0)
+ g_source_remove(server->source_id);
+ server->source_id = 0;
- for (i = 0; i < serv_ref_cnt; i++)
- g_object_unref(server->server);
+ g_object_unref(server->server);
done:
klass->send_response(server, "OK:DESTROY");
if ((id = gst_rtsp_server_attach(GST_RTSP_SERVER_CAST(server), NULL)) == 0)
goto failed;
+ server_obj->source_id = id;
+
g_signal_connect(server, "client-connected", G_CALLBACK(__miracast_server_client_connected_cb), server_obj);
server_obj->server = (void *) server;
SCMIRRORING_SAFE_FREE(scmirroring->port);
SCMIRRORING_SAFE_FREE(scmirroring->scmirroring_state_cb);
- g_io_channel_shutdown(scmirroring->channel, FALSE, NULL);
- g_io_channel_unref(scmirroring->channel);
+ if (scmirroring->channel != NULL) {
+ g_io_channel_shutdown(scmirroring->channel, FALSE, NULL);
+ g_io_channel_unref(scmirroring->channel);
+ scmirroring->channel = NULL;
+ }
+
+ if (scmirroring->sock != -1) {
+ close(scmirroring->sock);
+ scmirroring->sock = -1;
+ }
SCMIRRORING_SAFE_G_FREE(scmirroring->sock_path);
- SCMIRRORING_SAFE_FREE(scmirroring);
+ scmirroring->connected = NOT_CONNECTED_TO_SERVER;
}
return FALSE;
if (ret != SCMIRRORING_ERROR_NONE)
scmirroring_error("Failed to destroy miracast server [%d]", ret);
- if (_scmirroring->channel != NULL) {
- g_io_channel_shutdown(_scmirroring->channel, FALSE, NULL);
- g_io_channel_unref(_scmirroring->channel);
- _scmirroring->channel = NULL;
- }
-
- if (_scmirroring->sock != -1) {
- close(_scmirroring->sock);
- _scmirroring->sock = -1;
- }
-
- SCMIRRORING_SAFE_G_FREE(_scmirroring->sock_path);
- _scmirroring->connected = NOT_CONNECTED_TO_SERVER;
-
scmirroring_debug_fleave();
return ret;