Re: XForms: flimage problem revisited

From: Jens Thoms Toerring (Jens.Toerring@physik.fu-berlin.de)
Date: Sun Mar 24 2002 - 16:38:20 EST


# To subscribers of the xforms list from Jens Thoms Toerring <Jens.Toerring@physik.fu-berlin.de> :

Hello,

  I promised to write an example program as simple as possible that still
crashes with a segmentation fault on flimage_free( ). Here it is:

-----8<---- snip here ---------------------------------------------------

#include <stdlib.h>
#include <forms.h>

typedef struct {
    FL_FORM *flimage;
    void *vdata;
    char *cdata;
    long ldata;
    FL_OBJECT *canvas;
} FD_flimage;

FD_flimage *create_form_flimage( void );

int main( int argc, char *argv[ ] )
{
    Display *d;
    FD_flimage *flimage;
    Pixmap pm;
    FL_IMAGE *fl_image;

    if ( ( d = fl_initialize( &argc, argv, "flimage", NULL, 0 ) ) == NULL )
        return EXIT_FAILURE;

    flimage = create_form_flimage( );
    fl_show_form( flimage->flimage, FL_PLACE_MOUSE, FL_FULLBORDER,
                  "flimage" );

    pm = XCreatePixmap( d, FL_ObjWin( flimage->canvas ), 100, 100,
                        fl_get_canvas_depth( flimage->canvas ) );

    if ( ( fl_image = flimage_alloc( ) ) == NULL )
        return EXIT_FAILURE;

    flimage_from_pixmap( fl_image, pm );
    flimage_dump( fl_image, "/tmp/xx.ppm", "PPM" );
    flimage_free( fl_image );

    XFreePixmap( d, pm );
    fl_hide_form( flimage->flimage );
    fl_free_form( flimage->flimage );
    return EXIT_SUCCESS;
}

FD_flimage *create_form_flimage( void )
{
    FL_OBJECT *obj;
    FD_flimage *fdui = ( FD_flimage * ) fl_calloc( 1, sizeof *fdui );

    fdui->flimage = fl_bgn_form( FL_NO_BOX, 100, 100 );
    obj = fl_add_box( FL_UP_BOX, 0, 0, 100, 100, "" );
    fdui->canvas = obj = fl_add_canvas( FL_NORMAL_CANVAS, 0, 0, 100, 100, ""
    );
    fl_end_form();

    fdui->flimage->fdui = fdui;

    return fdui;
}

-----8<---- snip here ---------------------------------------------------

I compile it using gcc version 2.95.3 with

CFLAGS="-ggdb -Wall -W -I/usr/X11R6/include"
LDFALGS="-L/usr/X11R6/lib -lX11 -lforms -lm"

and get an executable named flimage. Running ldd on it gives:

jens@dorimare:~/Programming/TESTS/flimage> ldd flimage
        libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40023000)
        libforms.so.0.89 => /usr/X11R6/lib/libforms.so.0.89 (0x40106000)
        libm.so.6 => /lib/libm.so.6 (0x401d6000)
        libc.so.6 => /lib/libc.so.6 (0x401f8000)
        libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x4031e000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

When I run it the form shortly pops up, the pixmap gets dumped into the
file (I get: "Done Writing /tmp/xx.ppm(PPM) 100%(100 of 100)") but on
flimage_free( ) it crashes with a segmentation fault. Here the backtrace
I get from gdb:

Program received signal SIGSEGV, Segmentation fault.
0x4026c96d in free () from /lib/libc.so.6
(gdb) bt
#0 0x4026c96d in free () from /lib/libc.so.6
#1 0x4025e663 in fclose@@GLIBC_2.1 () from /lib/libc.so.6
#2 0x40140d8d in flimage_close () from /usr/X11R6/lib/libforms.so.0.89
#3 0x401416f2 in flimage_free () from /usr/X11R6/lib/libforms.so.0.89
#4 0x08048a68 in main (argc=1, argv=0xbffff334) at flimage.c:41
#5 0x402157ee in __libc_start_main () from /lib/libc.so.6

As I already wrote this happens on a machine running Linux:

jens@dorimare:~/Programming/TESTS/flimage> uname -a
Linux dorimare 2.4.17 #17 Wed Feb 27 03:35:23 CET 2002 i686 unknown

The libc version I have is:

jens@dorimare:~/Programming/TESTS/flimage> /lib/libc.so.6
GNU C Library stable release version 2.2.4, by Roland McGrath et al.
Copyright (C) 1992-1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 2.95.3 20010315 (SuSE).
Compiled on a Linux 2.4.9 system on 2001-09-20.
Available extensions:
        GNU libio by Per Bothner
        crypt add-on version 2.1 by Michael Glad and others
        Berkeley DB glibc 2.1 compat library by Thorsten Kukuk
        linuxthreads-0.9 by Xavier Leroy
        NoVersion patch for broken glibc 2.0 binaries
        BIND-8.2.3-T5B
        libthread_db work sponsored by Alpha Processor Inc
        NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Report bugs using the `glibcbug' script to <bugs@gnu.org>.

                                               Regards, Jens

-- 
      _  _____  _____
     | ||_   _||_   _|        Jens.Toerring@physik.fu-berlin.de
  _  | |  | |    | |          AG Moebius, Institut fuer Molekuelphysik
 | |_| |  | |    | |          Fachbereich Physik, Freie Universitaet Berlin
  \___/ens|_|homs|_|oerring   Tel: ++49 (0)30 838 - 53394 / FAX: - 56046
_________________________________________________
To unsubscribe, send the message "unsubscribe" to
xforms-request@bob.usuhs.mil   or see
http://bob.usuhs.mil/mailserv/xforms.html
XForms Home Page: http://world.std.com/~xforms
List Archive: http://bob.usuhs.mil/mailserv/list-archives/



This archive was generated by hypermail 2b29 : Wed May 01 2002 - 13:54:17 EDT