[glib: 1/2] gmain: Officially deprecate g_main_context_wait()



commit 7a34e396ae56fff4212df5e8c5aa2a0ccc855ab3
Author: Philip Withnall <withnall endlessm com>
Date:   Wed May 16 10:42:21 2018 +0100

    gmain: Officially deprecate g_main_context_wait()
    
    It’s been de-facto deprecated for a long time, due to emitting a
    critical warning when used in a non-internal context. Make that official
    in the documentation and with a deprecation annotation.
    
    Split the implementation into an internal helper and an external
    wrapper, so the two remaining internal uses don’t emit deprecation
    warnings.
    
    Signed-off-by: Philip Withnall <withnall endlessm com>
    
    https://gitlab.gnome.org/GNOME/glib/issues/903

 glib/gmain.c | 92 ++++++++++++++++++++++++++++++++++--------------------------
 glib/gmain.h |  2 +-
 2 files changed, 53 insertions(+), 41 deletions(-)
---
diff --git a/glib/gmain.c b/glib/gmain.c
index 5f0b05198..fcd996a18 100644
--- a/glib/gmain.c
+++ b/glib/gmain.c
@@ -3307,25 +3307,10 @@ g_main_context_release (GMainContext *context)
   UNLOCK_CONTEXT (context); 
 }
 
-/**
- * g_main_context_wait:
- * @context: a #GMainContext
- * @cond: a condition variable
- * @mutex: a mutex, currently held
- * 
- * Tries to become the owner of the specified context,
- * as with g_main_context_acquire(). But if another thread
- * is the owner, atomically drop @mutex and wait on @cond until 
- * that owner releases ownership or until @cond is signaled, then
- * try again (once) to become the owner.
- * 
- * Returns: %TRUE if the operation succeeded, and
- *   this thread is now the owner of @context.
- **/
-gboolean
-g_main_context_wait (GMainContext *context,
-                    GCond        *cond,
-                    GMutex       *mutex)
+static gboolean
+g_main_context_wait_internal (GMainContext *context,
+                              GCond        *cond,
+                              GMutex       *mutex)
 {
   gboolean result = FALSE;
   GThread *self = G_THREAD_SELF;
@@ -3334,18 +3319,6 @@ g_main_context_wait (GMainContext *context,
   if (context == NULL)
     context = g_main_context_default ();
 
-  if G_UNLIKELY (cond != &context->cond || mutex != &context->mutex)
-    {
-      static gboolean warned;
-
-      if (!warned)
-        {
-          g_critical ("WARNING!! g_main_context_wait() will be removed in a future release.  "
-                      "If you see this message, please file a bug immediately.");
-          warned = TRUE;
-        }
-    }
-
   loop_internal_waiter = (mutex == &context->mutex);
   
   if (!loop_internal_waiter)
@@ -3361,10 +3334,10 @@ g_main_context_wait (GMainContext *context,
       context->waiters = g_slist_append (context->waiters, &waiter);
       
       if (!loop_internal_waiter)
-       UNLOCK_CONTEXT (context);
+        UNLOCK_CONTEXT (context);
       g_cond_wait (cond, mutex);
-      if (!loop_internal_waiter)      
-       LOCK_CONTEXT (context);
+      if (!loop_internal_waiter)
+        LOCK_CONTEXT (context);
 
       context->waiters = g_slist_remove (context->waiters, &waiter);
     }
@@ -3387,6 +3360,45 @@ g_main_context_wait (GMainContext *context,
   return result;
 }
 
+/**
+ * g_main_context_wait:
+ * @context: a #GMainContext
+ * @cond: a condition variable
+ * @mutex: a mutex, currently held
+ *
+ * Tries to become the owner of the specified context,
+ * as with g_main_context_acquire(). But if another thread
+ * is the owner, atomically drop @mutex and wait on @cond until
+ * that owner releases ownership or until @cond is signaled, then
+ * try again (once) to become the owner.
+ *
+ * Returns: %TRUE if the operation succeeded, and
+ *   this thread is now the owner of @context.
+ * Deprecated: 2.58: Use g_main_context_is_owner() and separate locking instead.
+ */
+gboolean
+g_main_context_wait (GMainContext *context,
+                     GCond        *cond,
+                     GMutex       *mutex)
+{
+  if (context == NULL)
+    context = g_main_context_default ();
+
+  if (G_UNLIKELY (cond != &context->cond || mutex != &context->mutex))
+    {
+      static gboolean warned;
+
+      if (!warned)
+        {
+          g_critical ("WARNING!! g_main_context_wait() will be removed in a future release.  "
+                      "If you see this message, please file a bug immediately.");
+          warned = TRUE;
+        }
+    }
+
+  return g_main_context_wait_internal (context, cond, mutex);
+}
+
 /**
  * g_main_context_prepare:
  * @context: a #GMainContext
@@ -3864,9 +3876,9 @@ g_main_context_iterate (GMainContext *context,
       if (!block)
        return FALSE;
 
-      got_ownership = g_main_context_wait (context,
-                                           &context->cond,
-                                           &context->mutex);
+      got_ownership = g_main_context_wait_internal (context,
+                                                    &context->cond,
+                                                    &context->mutex);
 
       if (!got_ownership)
        return FALSE;
@@ -4073,9 +4085,9 @@ g_main_loop_run (GMainLoop *loop)
        loop->is_running = TRUE;
 
       while (loop->is_running && !got_ownership)
-       got_ownership = g_main_context_wait (loop->context,
-                                             &loop->context->cond,
-                                             &loop->context->mutex);
+        got_ownership = g_main_context_wait_internal (loop->context,
+                                                      &loop->context->cond,
+                                                      &loop->context->mutex);
       
       if (!loop->is_running)
        {
diff --git a/glib/gmain.h b/glib/gmain.h
index de6a73ac9..eca14d7d5 100644
--- a/glib/gmain.h
+++ b/glib/gmain.h
@@ -376,7 +376,7 @@ GLIB_AVAILABLE_IN_ALL
 void     g_main_context_release (GMainContext *context);
 GLIB_AVAILABLE_IN_ALL
 gboolean g_main_context_is_owner (GMainContext *context);
-GLIB_AVAILABLE_IN_ALL
+GLIB_DEPRECATED_IN_2_58_FOR(g_main_context_is_owner)
 gboolean g_main_context_wait    (GMainContext *context,
                                  GCond        *cond,
                                  GMutex       *mutex);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]