diff mbox

[RFH] vhost-user-test: fix g_cond_wait_until compat implementation

Message ID 1467134569-32294-1-git-send-email-pbonzini@redhat.com
State New
Headers show

Commit Message

Paolo Bonzini June 28, 2016, 5:22 p.m. UTC
This fixes compilation with glib versions up to 2.30, such
as the one in CentOS 6.

Even with this patch the test fails though:

ERROR:/tmp/qemu-test/src/tests/vhost-user-test.c:165:wait_for_fds: assertion failed: (s->fds_num)

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 tests/vhost-user-test.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

Comments

Marc-André Lureau June 29, 2016, 11:48 a.m. UTC | #1
Hi

On Tue, Jun 28, 2016 at 7:22 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> This fixes compilation with glib versions up to 2.30, such
> as the one in CentOS 6.
>

What's RFH in title? :) (not sure this applies here:
http://www.urbandictionary.com/define.php?term=rfh)

> Even with this patch the test fails though:
>
> ERROR:/tmp/qemu-test/src/tests/vhost-user-test.c:165:wait_for_fds: assertion failed: (s->fds_num)
>

That's a regression from Cornelia's series "virtio-bus: have callers
tolerate new host notifier api".

> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  tests/vhost-user-test.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
> index 8b2164b..4de64df 100644
> --- a/tests/vhost-user-test.c
> +++ b/tests/vhost-user-test.c
> @@ -127,21 +127,24 @@ typedef struct TestServer {
>      int fds_num;
>      int fds[VHOST_MEMORY_MAX_NREGIONS];
>      VhostUserMemory memory;
> -    GMutex data_mutex;
> -    GCond data_cond;
> +    CompatGMutex data_mutex;
> +    CompatGCond data_cond;
>      int log_fd;
>      uint64_t rings;
>  } TestServer;
>
>  #if !GLIB_CHECK_VERSION(2, 32, 0)
> -static gboolean g_cond_wait_until(CompatGCond cond, CompatGMutex mutex,
> +static gboolean g_cond_wait_until(CompatGCond *cond, CompatGMutex *mutex,
>                                    gint64 end_time)
>  {
>      gboolean ret = FALSE;
>      end_time -= g_get_monotonic_time();
>      GTimeVal time = { end_time / G_TIME_SPAN_SECOND,
>                        end_time % G_TIME_SPAN_SECOND };
> -    ret = g_cond_timed_wait(cond, mutex, &time);
> +    g_assert(mutex->once.status != G_ONCE_STATUS_PROGRESS);
> +    g_once(&cond->once, do_g_cond_new, NULL);
> +    ret = g_cond_timed_wait((GCond *) cond->once.retval,
> +                            (GMutex *) mutex->once.retval, &time);
>      return ret;
>  }
>  #endif
> --
> 2.7.4
>
>


Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Paolo Bonzini June 29, 2016, 12:01 p.m. UTC | #2
On 29/06/2016 13:48, Marc-André Lureau wrote:
> Hi
> 
> On Tue, Jun 28, 2016 at 7:22 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
>> This fixes compilation with glib versions up to 2.30, such
>> as the one in CentOS 6.
>>
> 
> What's RFH in title? :) (not sure this applies here:
> http://www.urbandictionary.com/define.php?term=rfh)

Request for help with the other bug. :)

Paolo

>> Even with this patch the test fails though:
>>
>> ERROR:/tmp/qemu-test/src/tests/vhost-user-test.c:165:wait_for_fds: assertion failed: (s->fds_num)
>>
> 
> That's a regression from Cornelia's series "virtio-bus: have callers
> tolerate new host notifier api".
> 
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>>  tests/vhost-user-test.c | 11 +++++++----
>>  1 file changed, 7 insertions(+), 4 deletions(-)
>>
>> diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
>> index 8b2164b..4de64df 100644
>> --- a/tests/vhost-user-test.c
>> +++ b/tests/vhost-user-test.c
>> @@ -127,21 +127,24 @@ typedef struct TestServer {
>>      int fds_num;
>>      int fds[VHOST_MEMORY_MAX_NREGIONS];
>>      VhostUserMemory memory;
>> -    GMutex data_mutex;
>> -    GCond data_cond;
>> +    CompatGMutex data_mutex;
>> +    CompatGCond data_cond;
>>      int log_fd;
>>      uint64_t rings;
>>  } TestServer;
>>
>>  #if !GLIB_CHECK_VERSION(2, 32, 0)
>> -static gboolean g_cond_wait_until(CompatGCond cond, CompatGMutex mutex,
>> +static gboolean g_cond_wait_until(CompatGCond *cond, CompatGMutex *mutex,
>>                                    gint64 end_time)
>>  {
>>      gboolean ret = FALSE;
>>      end_time -= g_get_monotonic_time();
>>      GTimeVal time = { end_time / G_TIME_SPAN_SECOND,
>>                        end_time % G_TIME_SPAN_SECOND };
>> -    ret = g_cond_timed_wait(cond, mutex, &time);
>> +    g_assert(mutex->once.status != G_ONCE_STATUS_PROGRESS);
>> +    g_once(&cond->once, do_g_cond_new, NULL);
>> +    ret = g_cond_timed_wait((GCond *) cond->once.retval,
>> +                            (GMutex *) mutex->once.retval, &time);
>>      return ret;
>>  }
>>  #endif
>> --
>> 2.7.4
>>
>>
> 
> 
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> 
>
diff mbox

Patch

diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
index 8b2164b..4de64df 100644
--- a/tests/vhost-user-test.c
+++ b/tests/vhost-user-test.c
@@ -127,21 +127,24 @@  typedef struct TestServer {
     int fds_num;
     int fds[VHOST_MEMORY_MAX_NREGIONS];
     VhostUserMemory memory;
-    GMutex data_mutex;
-    GCond data_cond;
+    CompatGMutex data_mutex;
+    CompatGCond data_cond;
     int log_fd;
     uint64_t rings;
 } TestServer;
 
 #if !GLIB_CHECK_VERSION(2, 32, 0)
-static gboolean g_cond_wait_until(CompatGCond cond, CompatGMutex mutex,
+static gboolean g_cond_wait_until(CompatGCond *cond, CompatGMutex *mutex,
                                   gint64 end_time)
 {
     gboolean ret = FALSE;
     end_time -= g_get_monotonic_time();
     GTimeVal time = { end_time / G_TIME_SPAN_SECOND,
                       end_time % G_TIME_SPAN_SECOND };
-    ret = g_cond_timed_wait(cond, mutex, &time);
+    g_assert(mutex->once.status != G_ONCE_STATUS_PROGRESS);
+    g_once(&cond->once, do_g_cond_new, NULL);
+    ret = g_cond_timed_wait((GCond *) cond->once.retval,
+                            (GMutex *) mutex->once.retval, &time);
     return ret;
 }
 #endif