rcu barrier: handle OOM die urcu_die
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 14 Jun 2013 12:22:50 +0000 (08:22 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 14 Jun 2013 21:29:32 +0000 (17:29 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
urcu-call-rcu-impl.h

index fb3568f802f210d2015b9a42e9d20691ee59df4c..10c4f3ec2fad83c61e8275059fc3ce7b618d4e5b 100644 (file)
@@ -786,7 +786,7 @@ void rcu_barrier(void)
 {
        struct call_rcu_data *crdp;
        struct call_rcu_completion completion;
-       int count = 0, work_count = 0;
+       int count = 0;
        int was_online;
 
        /* Put in offline state in QSBR. */
@@ -817,24 +817,13 @@ void rcu_barrier(void)
                struct call_rcu_completion_work *work;
 
                work = calloc(sizeof(*work), 1);
-               if (!work) {
-                       static int warned = 0;
-
-                       if (!warned) {
-                               fprintf(stderr, "[error] liburcu: unable to allocate memory for rcu_barrier()\n");
-                       }
-                       warned = 1;
-                       break;
-               }
+               if (!work)
+                       urcu_die(errno);
                work->completion = &completion;
                _call_rcu(&work->head, _rcu_barrier_complete, crdp);
-               work_count++;
        }
        call_rcu_unlock(&call_rcu_mutex);
 
-       if (work_count != count)
-               uatomic_sub(&completion.barrier_count, count - work_count);
-
        /* Wait for them */
        for (;;) {
                uatomic_dec(&completion.futex);
This page took 0.025368 seconds and 4 git commands to generate.