fixed cothread locking and set_arg/get_arg safety, and switched to 64 cothreads of 32KB

Original commit message from CVS:
fixed cothread locking and set_arg/get_arg safety, and switched to 64 cothreads of 32KB
This commit is contained in:
Erik Walthinsen 2001-05-26 22:58:15 +00:00
parent 51df56e1aa
commit f3098e9546
3 changed files with 27 additions and 8 deletions

View file

@ -36,8 +36,8 @@
#include "gstarch.h" #include "gstarch.h"
#define COTHREAD_STACKSIZE 16384 #define COTHREAD_STACKSIZE 32768
#define COTHREAD_MAXTHREADS 128 #define COTHREAD_MAXTHREADS 64
#define STACK_SIZE 0x200000 #define STACK_SIZE 0x200000
@ -385,7 +385,8 @@ cothread_lock (cothread_state *thread)
#ifdef COTHREAD_ATOMIC #ifdef COTHREAD_ATOMIC
// do something to lock the cothread // do something to lock the cothread
#else #else
g_mutex_lock(thread->lock); if (thread->lock)
g_mutex_lock(thread->lock);
#endif #endif
} }
@ -395,7 +396,10 @@ cothread_trylock (cothread_state *thread)
#ifdef COTHREAD_ATOMIC #ifdef COTHREAD_ATOMIC
// do something to try to lock the cothread // do something to try to lock the cothread
#else #else
return g_mutex_trylock(thread->lock); if (thread->lock)
return g_mutex_trylock(thread->lock);
else
return FALSE;
#endif #endif
} }
@ -405,7 +409,8 @@ cothread_unlock (cothread_state *thread)
#ifdef COTHREAD_ATOMIC #ifdef COTHREAD_ATOMIC
// do something to unlock the cothread // do something to unlock the cothread
#else #else
g_mutex_unlock(thread->lock); if (thread->lock)
g_mutex_unlock(thread->lock);
#endif #endif
} }

View file

@ -49,6 +49,7 @@ enum {
static void gst_element_class_init (GstElementClass *klass); static void gst_element_class_init (GstElementClass *klass);
static void gst_element_init (GstElement *element); static void gst_element_init (GstElement *element);
static void gst_element_base_class_init (GstElementClass *klass);
static void gst_element_set_arg (GtkObject *object, GtkArg *arg, guint id); static void gst_element_set_arg (GtkObject *object, GtkArg *arg, guint id);
static void gst_element_get_arg (GtkObject *object, GtkArg *arg, guint id); static void gst_element_get_arg (GtkObject *object, GtkArg *arg, guint id);
@ -75,7 +76,7 @@ GtkType gst_element_get_type(void) {
(GtkObjectInitFunc)gst_element_init, (GtkObjectInitFunc)gst_element_init,
(GtkArgSetFunc)gst_element_set_arg, (GtkArgSetFunc)gst_element_set_arg,
(GtkArgGetFunc)gst_element_get_arg, (GtkArgGetFunc)gst_element_get_arg,
(GtkClassInitFunc)NULL, (GtkClassInitFunc)gst_element_base_class_init,
}; };
element_type = gtk_type_unique(GST_TYPE_OBJECT,&element_info); element_type = gtk_type_unique(GST_TYPE_OBJECT,&element_info);
} }
@ -143,6 +144,17 @@ gst_element_class_init (GstElementClass *klass)
klass->elementfactory = NULL; klass->elementfactory = NULL;
} }
static void
gst_element_base_class_init (GstElementClass *klass)
{
GtkObjectClass *gtkobject_class;
gtkobject_class = (GtkObjectClass*) klass;
gtkobject_class->set_arg = GST_DEBUG_FUNCPTR(gst_element_set_arg);
gtkobject_class->get_arg = GST_DEBUG_FUNCPTR(gst_element_get_arg);
}
static void static void
gst_element_init (GstElement *element) gst_element_init (GstElement *element)
{ {

View file

@ -778,13 +778,15 @@ void gst_bin_schedule_func(GstBin *bin) {
static void static void
gst_schedule_lock_element (GstSchedule *sched,GstElement *element) gst_schedule_lock_element (GstSchedule *sched,GstElement *element)
{ {
cothread_lock(element->threadstate); if (element->threadstate)
cothread_lock(element->threadstate);
} }
static void static void
gst_schedule_unlock_element (GstSchedule *sched,GstElement *element) gst_schedule_unlock_element (GstSchedule *sched,GstElement *element)
{ {
cothread_unlock(element->threadstate); if (element->threadstate)
cothread_unlock(element->threadstate);
} }