mirror of
https://github.com/brl/mutter.git
synced 2024-11-29 19:40:43 -05:00
Remove locking from ClutterTimeoutPool
The mutex protection for the timeout pool was causing deadlocks, so it has been removed for the time being, until I figure out a way to make it work properly. A timeout pool should not be considered thread-safe (or thread-aware) until further notice.
This commit is contained in:
parent
450ac94e49
commit
7d18616cfa
@ -60,7 +60,6 @@ struct _ClutterTimeoutPool
|
|||||||
{
|
{
|
||||||
GSource source;
|
GSource source;
|
||||||
|
|
||||||
GStaticMutex mutex;
|
|
||||||
guint next_id;
|
guint next_id;
|
||||||
|
|
||||||
GList *timeouts;
|
GList *timeouts;
|
||||||
@ -69,9 +68,6 @@ struct _ClutterTimeoutPool
|
|||||||
guint id;
|
guint id;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define LOCK_POOL(pool) g_static_mutex_lock (&pool->mutex);
|
|
||||||
#define UNLOCK_POOL(pool) g_static_mutex_unlock (&pool->mutex);
|
|
||||||
|
|
||||||
#define TIMEOUT_REMOVED(timeout) ((timeout->flags & CLUTTER_TIMEOUT_ACTIVE) == 0)
|
#define TIMEOUT_REMOVED(timeout) ((timeout->flags & CLUTTER_TIMEOUT_ACTIVE) == 0)
|
||||||
#define TIMEOUT_READY(timeout) ((timeout->flags & CLUTTER_TIMEOUT_READY) == 1)
|
#define TIMEOUT_READY(timeout) ((timeout->flags & CLUTTER_TIMEOUT_READY) == 1)
|
||||||
|
|
||||||
@ -260,8 +256,6 @@ clutter_timeout_pool_check (GSource *source)
|
|||||||
ClutterTimeoutPool *pool = (ClutterTimeoutPool *) source;
|
ClutterTimeoutPool *pool = (ClutterTimeoutPool *) source;
|
||||||
GList *l = pool->timeouts;
|
GList *l = pool->timeouts;
|
||||||
|
|
||||||
LOCK_POOL (pool);
|
|
||||||
|
|
||||||
for (l = pool->timeouts; l; l = l->next)
|
for (l = pool->timeouts; l; l = l->next)
|
||||||
{
|
{
|
||||||
ClutterTimeout *timeout = l->data;
|
ClutterTimeout *timeout = l->data;
|
||||||
@ -280,8 +274,6 @@ clutter_timeout_pool_check (GSource *source)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
UNLOCK_POOL (pool);
|
|
||||||
|
|
||||||
return (pool->ready > 0);
|
return (pool->ready > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,17 +286,11 @@ clutter_timeout_pool_dispatch (GSource *source,
|
|||||||
GList *l = pool->timeouts;
|
GList *l = pool->timeouts;
|
||||||
gboolean sort_needed = FALSE;
|
gboolean sort_needed = FALSE;
|
||||||
|
|
||||||
LOCK_POOL (pool);
|
|
||||||
|
|
||||||
/* the main loop might have predicted this, so we repeat the
|
/* the main loop might have predicted this, so we repeat the
|
||||||
* check for ready timeouts.
|
* check for ready timeouts.
|
||||||
*/
|
*/
|
||||||
if (!pool->ready)
|
if (!pool->ready)
|
||||||
{
|
clutter_timeout_pool_check (source);
|
||||||
UNLOCK_POOL (pool);
|
|
||||||
clutter_timeout_pool_check (source);
|
|
||||||
LOCK_POOL (pool);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (l && l->data && (pool->ready-- > 0))
|
while (l && l->data && (pool->ready-- > 0))
|
||||||
{
|
{
|
||||||
@ -338,8 +324,6 @@ clutter_timeout_pool_dispatch (GSource *source,
|
|||||||
|
|
||||||
pool->ready = 0;
|
pool->ready = 0;
|
||||||
|
|
||||||
UNLOCK_POOL (pool);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -348,8 +332,6 @@ clutter_timeout_pool_finalize (GSource *source)
|
|||||||
{
|
{
|
||||||
ClutterTimeoutPool *pool = (ClutterTimeoutPool *) source;
|
ClutterTimeoutPool *pool = (ClutterTimeoutPool *) source;
|
||||||
|
|
||||||
g_static_mutex_free (&pool->mutex);
|
|
||||||
|
|
||||||
g_list_foreach (pool->timeouts, (GFunc) clutter_timeout_free, NULL);
|
g_list_foreach (pool->timeouts, (GFunc) clutter_timeout_free, NULL);
|
||||||
g_list_free (pool->timeouts);
|
g_list_free (pool->timeouts);
|
||||||
}
|
}
|
||||||
@ -388,7 +370,6 @@ clutter_timeout_pool_new (gint priority)
|
|||||||
g_source_set_priority (source, priority);
|
g_source_set_priority (source, priority);
|
||||||
|
|
||||||
pool = (ClutterTimeoutPool *) source;
|
pool = (ClutterTimeoutPool *) source;
|
||||||
g_static_mutex_init (&pool->mutex);
|
|
||||||
pool->next_id = 1;
|
pool->next_id = 1;
|
||||||
pool->id = g_source_attach (source, NULL);
|
pool->id = g_source_attach (source, NULL);
|
||||||
g_source_unref (source);
|
g_source_unref (source);
|
||||||
@ -431,8 +412,6 @@ clutter_timeout_pool_add (ClutterTimeoutPool *pool,
|
|||||||
ClutterTimeout *timeout;
|
ClutterTimeout *timeout;
|
||||||
guint retval = 0;
|
guint retval = 0;
|
||||||
|
|
||||||
LOCK_POOL (pool);
|
|
||||||
|
|
||||||
timeout = clutter_timeout_new (interval);
|
timeout = clutter_timeout_new (interval);
|
||||||
timeout->flags |= CLUTTER_TIMEOUT_ACTIVE;
|
timeout->flags |= CLUTTER_TIMEOUT_ACTIVE;
|
||||||
|
|
||||||
@ -445,8 +424,6 @@ clutter_timeout_pool_add (ClutterTimeoutPool *pool,
|
|||||||
pool->timeouts = g_list_insert_sorted (pool->timeouts, timeout,
|
pool->timeouts = g_list_insert_sorted (pool->timeouts, timeout,
|
||||||
clutter_timeout_sort);
|
clutter_timeout_sort);
|
||||||
|
|
||||||
UNLOCK_POOL (pool);
|
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -467,8 +444,6 @@ clutter_timeout_pool_remove (ClutterTimeoutPool *pool,
|
|||||||
{
|
{
|
||||||
GList *l;
|
GList *l;
|
||||||
|
|
||||||
LOCK_POOL (pool);
|
|
||||||
|
|
||||||
l = g_list_find_custom (pool->timeouts, GUINT_TO_POINTER (id),
|
l = g_list_find_custom (pool->timeouts, GUINT_TO_POINTER (id),
|
||||||
clutter_timeout_find_by_id);
|
clutter_timeout_find_by_id);
|
||||||
if (l)
|
if (l)
|
||||||
@ -477,6 +452,4 @@ clutter_timeout_pool_remove (ClutterTimeoutPool *pool,
|
|||||||
|
|
||||||
timeout->flags &= ~CLUTTER_TIMEOUT_ACTIVE;
|
timeout->flags &= ~CLUTTER_TIMEOUT_ACTIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
UNLOCK_POOL (pool);
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user