#719579 libgvnc-1.0-0: Segmentation fault in glib

Package:
libgvnc-1.0-0
Source:
gtk-vnc
Description:
VNC GObject wrapper (runtime libraries)
Submitter:
Artem Rusanov
Date:
2013-08-13 09:21:06 UTC
Severity:
important
#719579#5
Date:
2013-08-13 09:03:13 UTC
From:
To:
Ucontext coroutine have problems with stability, gthread coroutine is ok.
To reproduce just run following test, in some seconds you will get segfault.

Program received signal SIGSEGV, Segmentation fault.
0xf786a228 in ?? () from /lib/libglib-2.0.so.0
(gdb) bt
#0  0xf786a228 in ?? () from /lib/libglib-2.0.so.0
#1  0xf77df904 in IA__g_idle_add_full (priority=200,
    function=0xf7fccd30 <vnc_connection_delayed_unref>, data=0x8099678,
    notify=0)
    at /build/buildd-
glib2.0_2.24.2-1-i386-AScyie/glib2.0-2.24.2/glib/gmain.c:4128
#2  0xf77df968 in IA__g_idle_add (
    function=0xf7fccd30 <vnc_connection_delayed_unref>, data=0x8099678)
    at /build/buildd-
glib2.0_2.24.2-1-i386-AScyie/glib2.0-2.24.2/glib/gmain.c:4154
#3  0xf7fcbeca in vnc_connection_coroutine (opaque=0x8099678)
    at vncconnection.c:5195
#4  0xf7fce086 in coroutine_trampoline (cc=0x80996a0)
    at coroutine_ucontext.c:52
#5  0xf7fcdeff in continuation_trampoline (i0=-143110156, i1=-144188539)
    at continuation.c:43
#6  0xf767db6b in makecontext () from /lib/libc.so.6
#7  0xf7784ff4 in ?? () from /lib/libc.so.6
#8  0xf7fd35ec in ?? () from /usr/local/lib/libgvnc-1.0.so.0
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

Test to reproduce problem (main.c):
#include <gtk/gtk.h>
#include <vncconnection.h>
#include <glib.h>
#include <stdio.h>

static gboolean
time_handler(VncConnection *conn)
{
    vnc_connection_open_host(conn, "localhost", "7777");

    return FALSE;
}

void disconnected(VncConnection *conn,
                        gpointer opaque G_GNUC_UNUSED)
{
    g_timeout_add(10, (GSourceFunc) time_handler, conn);
}

int main( int argc, char *argv[])
{
  GtkWidget *window;
  VncConnection *conn;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_widget_show(window);

  conn = vnc_connection_new();
  g_signal_connect(conn, "vnc-disconnected", G_CALLBACK(&disconnected), 0);

  vnc_connection_open_host(conn, "localhost", "7777");

  gtk_main();

  return 0;
}

To build:
gcc `pkg-config --libs --cflags gtk+-2.0 gtk-vnc-1.0` -o test main.c