/**
* SECTION:gsttask
+ * @title: GstTask
* @short_description: Abstraction of GStreamer streaming threads.
* @see_also: #GstElement, #GstPad
*
#define SET_TASK_STATE(t,s) (g_atomic_int_set (&GST_TASK_STATE(t), (s)))
#define GET_TASK_STATE(t) ((GstTaskState) g_atomic_int_get (&GST_TASK_STATE(t)))
-#define GST_TASK_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_TASK, GstTaskPrivate))
-
struct _GstTaskPrivate
{
/* callbacks for managing the thread of this task */
};
#ifdef _MSC_VER
+#define WIN32_LEAN_AND_MEAN
#include <windows.h>
struct _THREADNAME_INFO
__try {
RaiseException (0x406D1388, 0, sizeof (info) / sizeof (DWORD),
- (DWORD *) & info);
+ (const ULONG_PTR *) &info);
}
__except (EXCEPTION_CONTINUE_EXECUTION) {
}
GST_DEBUG_CATEGORY_INIT (task_debug, "task", 0, "Processing tasks"); \
}
-G_DEFINE_TYPE_WITH_CODE (GstTask, gst_task, GST_TYPE_OBJECT, _do_init);
+G_DEFINE_TYPE_WITH_CODE (GstTask, gst_task, GST_TYPE_OBJECT,
+ G_ADD_PRIVATE (GstTask) _do_init);
static void
init_klass_pool (GstTaskClass * klass)
gst_object_unref (klass->pool);
}
klass->pool = gst_task_pool_new ();
+ /* Classes are never destroyed so this ref will never be dropped */
+ GST_OBJECT_FLAG_SET (klass->pool, GST_OBJECT_FLAG_MAY_BE_LEAKED);
gst_task_pool_prepare (klass->pool, NULL);
g_mutex_unlock (&pool_lock);
}
gobject_class = (GObjectClass *) klass;
- g_type_class_add_private (klass, sizeof (GstTaskPrivate));
-
gobject_class->finalize = gst_task_finalize;
init_klass_pool (klass);
klass = GST_TASK_GET_CLASS (task);
- task->priv = GST_TASK_GET_PRIVATE (task);
+ task->priv = gst_task_get_instance_private (task);
task->running = FALSE;
task->thread = NULL;
task->lock = NULL;
g_mutex_lock (&pool_lock);
task->priv->pool = gst_object_ref (klass->pool);
g_mutex_unlock (&pool_lock);
-
- /* clear floating flag */
- gst_object_ref_sink (task);
}
static void
if ((klass = g_type_class_peek (GST_TYPE_TASK))) {
init_klass_pool (klass);
}
+
+ /* GstElement owns a GThreadPool */
+ _priv_gst_element_cleanup ();
}
/**
g_return_val_if_fail (func != NULL, NULL);
- task = g_object_newv (GST_TYPE_TASK, 0, NULL);
+ task = g_object_new (GST_TYPE_TASK, NULL);
task->func = func;
task->user_data = user_data;
task->notify = notify;
GST_DEBUG ("Created task %p", task);
+ /* clear floating flag */
+ gst_object_ref_sink (task);
+
return task;
}