Fail to run glfw 3.0.4 examples on ubuntu 14.04

pri-1991 wrote on Saturday, October 11, 2014:

Not able to run .exe of following example (threads.c) present in GLFW3 3.0.4 on ubuntu 14.04 using:
gcc -I …/deps/ threads.c …/deps/tinycthread.c -g -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -lm.

example(threads.c) is as follows:

//========================================================================
// Multithreading test
// Copyright (c) Camilla Berglund <elmindreda@elmindreda.org>
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//    claim that you wrote the original software. If you use this software
//    in a product, an acknowledgment in the product documentation would
//    be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such, and must not
//    be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source
//    distribution.
//
//========================================================================
//
// This test is intended to verify whether the OpenGL context part of
// the GLFW API is able to be used from multiple threads
//
//========================================================================

#include "tinycthread.h"

#include <GLFW/glfw3.h>

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct
{
    GLFWwindow* window;
    const char* title;
    float r, g, b;
    thrd_t id;
} Thread;

static volatile GLboolean running = GL_TRUE;

static void error_callback(int error, const char* description)
{
    fprintf(stderr, "Error: %s\n", description);
}

static int thread_main(void* data)
{
    const Thread* thread = (const Thread*) data;

    glfwMakeContextCurrent(thread->window);
    glfwSwapInterval(1);

    while (running)
    {
        const float v = (float) fabs(sin(glfwGetTime() * 2.f));
        glClearColor(thread->r * v, thread->g * v, thread->b * v, 0.f);

        glClear(GL_COLOR_BUFFER_BIT);
        glfwSwapBuffers(thread->window);
    }

    glfwMakeContextCurrent(NULL);
    return 0;
}

int main(void)
{
    int i, result;
    Thread threads[] =
    {
        { NULL, "Red", 1.f, 0.f, 0.f, 0 },
        { NULL, "Green", 0.f, 1.f, 0.f, 0 },
        { NULL, "Blue", 0.f, 0.f, 1.f, 0 }
    };
    const int count = sizeof(threads) / sizeof(Thread);

    glfwSetErrorCallback(error_callback);

    if (!glfwInit())
        exit(EXIT_FAILURE);

    glfwWindowHint(GLFW_VISIBLE, GL_FALSE);

    for (i = 0;  i < count;  i++)
    {
        threads[i].window = glfwCreateWindow(200, 200,
                                             threads[i].title,
                                             NULL, NULL);
        if (!threads[i].window)
        {
            glfwTerminate();
            exit(EXIT_FAILURE);
        }

        glfwSetWindowPos(threads[i].window, 200 + 250 * i, 200);
        glfwShowWindow(threads[i].window);

        if (thrd_create(&threads[i].id, thread_main, threads + i) !=
            thrd_success)
        {
            fprintf(stderr, "Failed to create secondary thread\n");

            glfwTerminate();
            exit(EXIT_FAILURE);
        }
    }

    while (running)
    {
        glfwWaitEvents();

        for (i = 0;  i < count;  i++)
        {
            if (glfwWindowShouldClose(threads[i].window))
                running = GL_FALSE;
        }
    }

    for (i = 0;  i < count;  i++)
        thrd_join(threads[i].id, &result);

    exit(EXIT_SUCCESS);
}

After compiling with gcc when I ran .exe, following appears on the terminal:

Program terminated with signal SIGABRT, Aborted.
#0  0x00007f5637754bb9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56    ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  0x00007f5637754bb9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007f5637757fc8 in __GI_abort () at abort.c:89
#2  0x00007f563774da76 in __assert_fail_base (fmt=0x7f563789f370 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n",
    assertion=assertion@entry=0x7f56360a8615 "!c->out.queue_len", file=file@entry=0x7f56360a8600 "../../src/xcb_conn.c", line=line@entry=186,
    function=function@entry=0x7f56360a8630 "write_vec") at assert.c:92
#3  0x00007f563774db22 in __GI___assert_fail (assertion=0x7f56360a8615 "!c->out.queue_len", file=0x7f56360a8600 "../../src/xcb_conn.c",
    line=186, function=0x7f56360a8630 "write_vec") at assert.c:101
#4  0x00007f563609ce5b in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#5  0x00007f563609d191 in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#6  0x00007f563609d8a7 in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#7  0x00007f563609d9c8 in xcb_take_socket () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#8  0x00007f5638663a38 in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#9  0x00007f5638663b0e in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#10 0x00007f5638664580 in _XReply () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#11 0x00007f56389a0673 in ?? () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
#12 0x00007f563899e02b in ?? () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
#13 0x00007f563413e9a9 in ?? () from /usr/lib/x86_64-linux-gnu/dri/i965_dri.so
#14 0x00007f563413edc3 in ?? () from /usr/lib/x86_64-linux-gnu/dri/i965_dri.so
#15 0x00007f56341338f5 in ?? () from /usr/lib/x86_64-linux-gnu/dri/i965_dri.so
#16 0x0000000000403de3 in thread_main (data=0x7fff864450a0) at threads.c:66
#17 0x00000000004043bd in _thrd_wrapper_function (aArg=0x2525ca0) at ../deps/tinycthread.c:346
#18 0x00007f5638002182 in start_thread (arg=0x7f562a3c7700) at pthread_create.c:312
#19 0x00007f5637818fbd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Compilation of the above code along with #include “tinycthread.h” is successfully done. But while running .exe why am I facing the issue on UBUNTU 14.04…?

Even the same issue when I executed the .exe which is already present in GLFW 3.0.4.

Please help…!!!

The same code when executed on ubuntu 12.04, runs successfully.

Thanks in advance, any help would be appreciated.

elmindreda wrote on Saturday, October 11, 2014:

Compile with debug information so the call stack will be usable.

sumitgambhir wrote on Monday, October 13, 2014:

     gcc -I ../deps/ threads.c ../deps/tinycthread.c -g -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -lm 

    Following is the backtrace with gdb : -
    
            Program terminated with signal SIGABRT, Aborted.
    #0  0x00007f5637754bb9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
    56    ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
    (gdb) bt
    #0  0x00007f5637754bb9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
    #1  0x00007f5637757fc8 in __GI_abort () at abort.c:89
    #2  0x00007f563774da76 in __assert_fail_base (fmt=0x7f563789f370 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", 
        assertion=assertion@entry=0x7f56360a8615 "!c->out.queue_len", file=file@entry=0x7f56360a8600 "../../src/xcb_conn.c", line=line@entry=186, 
        function=function@entry=0x7f56360a8630 "write_vec") at assert.c:92
    #3  0x00007f563774db22 in __GI___assert_fail (assertion=0x7f56360a8615 "!c->out.queue_len", file=0x7f56360a8600 "../../src/xcb_conn.c", 
        line=186, function=0x7f56360a8630 "write_vec") at assert.c:101
    #4  0x00007f563609ce5b in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
    #5  0x00007f563609d191 in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
    #6  0x00007f563609d8a7 in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
    #7  0x00007f563609d9c8 in xcb_take_socket () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
    #8  0x00007f5638663a38 in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
    #9  0x00007f5638663b0e in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
    #10 0x00007f5638664580 in _XReply () from /usr/lib/x86_64-linux-gnu/libX11.so.6
    #11 0x00007f56389a0673 in ?? () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
    #12 0x00007f563899e02b in ?? () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
    #13 0x00007f563413e9a9 in ?? () from /usr/lib/x86_64-linux-gnu/dri/i965_dri.so
    #14 0x00007f563413edc3 in ?? () from /usr/lib/x86_64-linux-gnu/dri/i965_dri.so
    #15 0x00007f56341338f5 in ?? () from /usr/lib/x86_64-linux-gnu/dri/i965_dri.so
    #16 0x0000000000403de3 in thread_main (data=0x7fff864450a0) at threads.c:66
    #17 0x00000000004043bd in _thrd_wrapper_function (aArg=0x2525ca0) at ../deps/tinycthread.c:346
    #18 0x00007f5638002182 in start_thread (arg=0x7f562a3c7700) at pthread_create.c:312
    #19 0x00007f5637818fbd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111



    Anyone tried thread.c program on Ubuntu 14.04 which is under tests directory?
    Please help to resolve the issue.

elmindreda wrote on Monday, October 13, 2014:

Install xserver-xorg-video-intel-dbg for symbols for the Intel driver.

sumitgambhir wrote on Tuesday, October 14, 2014:

Backstrace after installing Intel drivers: - 
(gdb) bt
#0  0x00007f0970e75bb9 in __GI_raise (sig=sig@entry=6)
    at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007f0970e78fc8 in __GI_abort () at abort.c:89
#2  0x00007f0970e6ea76 in __assert_fail_base (
    fmt=0x7f0970fc0370 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", 
    assertion=assertion@entry=0x7f096f7c9615 "!c->out.queue_len", 
    file=file@entry=0x7f096f7c9600 "../../src/xcb_conn.c", 
    line=line@entry=186, function=function@entry=0x7f096f7c9630 "write_vec")
    at assert.c:92
#3  0x00007f0970e6eb22 in __GI___assert_fail (
    assertion=0x7f096f7c9615 "!c->out.queue_len", 
    file=0x7f096f7c9600 "../../src/xcb_conn.c", line=186, 
    function=0x7f096f7c9630 "write_vec") at assert.c:101
#4  0x00007f096f7bde5b in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#5  0x00007f096f7be191 in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#6  0x00007f096f7be8a7 in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#7  0x00007f096f7be9c8 in xcb_take_socket ()
   from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#8  0x00007f0971d84a38 in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#9  0x00007f0971d85259 in _XFlush () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#10 0x00007f0971d87c75 in _XGetRequest ()
   from /usr/lib/x86_64-linux-gnu/libX11.so.6
#11 0x00007f0971d810bb in XSync () from /usr/lib/x86_64-linux-gnu/libX11.so.6
---Type <return> to continue, or q <return> to quit---
#12 0x00007f09720c075a in ?? () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
#13 0x000000000040dc89 in _glfwPlatformSwapBuffers ()
#14 0x0000000000404e00 in glfwSwapBuffers ()
#15 0x0000000000403e4f in thread_main (data=0x7fff243ec830) at threads.c:67
#16 0x000000000040f747 in _thrd_wrapper_function (aArg=0x2242f30)
    at tinycthread.c:346
#17 0x00007f097120d182 in start_thread (arg=0x7f096b01d700)
    at pthread_create.c:312
#18 0x00007f0970f39fbd in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
(gdb)

elmindreda wrote on Tuesday, October 14, 2014:

Oh, now I remember this. Have a look at #131.