GST_DEBUG_CATEGORY_STATIC (rtsp_server_debug);
#define GST_CAT_DEFAULT rtsp_server_debug
+typedef struct _ClientContext ClientContext;
+
static guint gst_rtsp_server_signals[SIGNAL_LAST] = { 0 };
static void gst_rtsp_server_get_property (GObject * object, guint propid,
const GValue * value, GParamSpec * pspec);
static void gst_rtsp_server_finalize (GObject * object);
+static gpointer do_loop (ClientContext * ctx);
static GstRTSPClient *default_create_client (GstRTSPServer * server);
static gboolean default_accept_client (GstRTSPServer * server,
GstRTSPClient * client, GSocket * socket, GError ** error);
klass->create_client = default_create_client;
klass->accept_client = default_accept_client;
+ klass->pool = g_thread_pool_new ((GFunc) do_loop, klass, -1, FALSE, NULL);
+
GST_DEBUG_CATEGORY_INIT (rtsp_server_debug, "rtspserver", 0, "GstRTSPServer");
}
}
}
-typedef struct
+struct _ClientContext
{
GstRTSPServer *server;
GMainLoop *loop;
GMainContext *context;
GstRTSPClient *client;
-} ClientContext;
+};
static void
free_client_context (ClientContext * ctx)
GST_RTSP_SERVER_UNLOCK (server);
if (ctx->loop) {
- GThread *thread;
+ GstRTSPServerClass *klass = GST_RTSP_SERVER_GET_CLASS (server);
- thread = g_thread_new ("MainLoop Thread", (GThreadFunc) do_loop, ctx);
- g_thread_unref (thread);
+ g_thread_pool_push (klass->pool, ctx, NULL);
}
}
struct _GstRTSPServerClass {
GObjectClass parent_class;
+ GThreadPool *pool;
+
GstRTSPClient * (*create_client) (GstRTSPServer *server);
gboolean (*accept_client) (GstRTSPServer *server, GstRTSPClient *client,
GSocket *socket, GError **error);