[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Chicken-users] segfault using cairo/SDL
From: |
Markus Klotzbuecher |
Subject: |
[Chicken-users] segfault using cairo/SDL |
Date: |
Wed, 21 Dec 2011 21:11:40 +0100 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
Dear All,
I'm trying to use the cairo and sdl eggs for a small visualization
tool. One thing I would like to do is to use the mouse to move around
the current figure by clicking and holding it. However, I am getting
frequent segfaults after a few seconds of this moving around. The
crash happens both when running compiled and interpreted. Below an
slightly modified version of the test-cairo.scm from the cairo egg
that implements this "dragging" (I would have pasted it to
http://paste.call-cc.org/ , but the service seems down)
Is anyone else using these eggs and has seen such problems? Does
anyone have a suggestions how to track this down?
I using debian testing amd64, sdl-egg v0.5.4, cairo-egg 0.1.12.
CHICKEN Version 4.7.0
linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ]
compiled 2011-09-05 on gladstone.duckburg.org (Linux)
I'll be pleased to provide more information.
Thanks in advance!
Markus
Backtrace:
#0 0x00007fdd81c9476f in f_2129 (c=<optimized out>, t0=<optimized out>,
t1=<optimized out>) at cairo.c:3963
#1 0x00007fdd89a59b18 in C_values () from /usr/lib/libchicken.so.6
#2 0x00007fdd81c9afbe in f_2124 (c=<optimized out>, t0=<optimized out>,
t1=<optimized out>, t2=<optimized out>)
at cairo.c:3949
#3 0x0000000000401daa in f_438 (c=<optimized out>, t0=140736279960048,
t1=<optimized out>) at test-cairo.c:1661
#4 0x00007fdd81ca0893 in f_1614 (c=<optimized out>, t0=<optimized out>,
t1=<optimized out>) at cairo.c:4702
#5 0x00007fdd89a59b18 in C_values () from /usr/lib/libchicken.so.6
#6 0x00007fdd81c994a6 in f_1609 (c=<optimized out>, t0=<optimized out>,
t1=<optimized out>, t2=<optimized out>,
t3=<optimized out>) at cairo.c:4684
#7 0x00000000004026cf in f_435 (c=<optimized out>, t0=140736279960480,
t1=<optimized out>) at test-cairo.c:1653
#8 0x00007fdd81c940b5 in f_1497 (c=<optimized out>, t0=<optimized out>,
t1=<optimized out>) at cairo.c:4873
#9 0x00007fdd89a59b18 in C_values () from /usr/lib/libchicken.so.6
#10 0x00007fdd81c98f13 in f_1492 (c=<optimized out>, t0=<optimized out>,
t1=<optimized out>, t2=<optimized out>,
t3=<optimized out>, t4=<optimized out>, t5=3, t6=140589480767760) at
cairo.c:4855
#11 0x00000000004027c7 in f_432 (c=<optimized out>, t0=140736279961536,
t1=<optimized out>) at test-cairo.c:1640
#12 0x00007fdd81c946b5 in f_2087 (c=<optimized out>, t0=<optimized out>,
t1=<optimized out>) at cairo.c:4023
#13 0x00007fdd89a59b18 in C_values () from /usr/lib/libchicken.so.6
#14 0x00007fdd81c9ada3 in f_2082 (c=<optimized out>, t0=<optimized out>,
t1=<optimized out>, t2=<optimized out>,
t3=<optimized out>, t4=<optimized out>, t5=140736279961424,
t6=140736279960944) at cairo.c:4005
#15 0x0000000000401e11 in f_449 (c=<optimized out>, t0=140736279961296,
t1=140736279960944) at test-cairo.c:1627
#16 0x00007fdd89a5d27b in C_minus () from /usr/lib/libchicken.so.6
#17 0x0000000000406c8e in f_453 (c=<optimized out>, t0=140736279961336,
t1=140736279961184) at test-cairo.c:1619
#18 0x00007fdd81c94f73 in f_2223 (c=<optimized out>, t0=<optimized out>,
t1=140736279961336, t2=<optimized out>)
at cairo.c:3771
#19 0x00000000004028c5 in f_445 (c=<optimized out>, t0=140736279961568,
t1=<optimized out>) at test-cairo.c:1611
#20 0x00007fdd81c94e63 in f_2213 (c=<optimized out>, t0=<optimized out>,
t1=140736279961568, t2=<optimized out>)
at cairo.c:3791
#21 0x00000000004029ce in f_429 (c=<optimized out>, t0=140736279961872,
t1=<optimized out>) at test-cairo.c:1596
#22 0x00007fdd81c944d1 in f_1929 (c=<optimized out>, t0=<optimized out>,
t1=<optimized out>) at cairo.c:4211
#23 0x00007fdd89a59b18 in C_values () from /usr/lib/libchicken.so.6
#24 0x00007fdd81c9a56e in f_1924 (c=<optimized out>, t0=<optimized out>,
t1=<optimized out>, t2=<optimized out>)
at cairo.c:4197
#25 0x0000000000402ab1 in f_426 (c=<optimized out>, t0=140589481276352,
t1=<optimized out>) at test-cairo.c:1581
#26 0x00007fdd81c96528 in f_2512 (c=<optimized out>, t0=140589481276312,
t1=140736279962032) at cairo.c:3337
#27 0x00007fdd89849a75 in ?? () from /usr/lib/libchicken.so.6
#28 0x00007fdd89a36234 in ?? () from /usr/lib/libchicken.so.6
#29 0x00007fdd89a5b112 in C_allocate_vector () from /usr/lib/libchicken.so.6
#30 0x00007fdd8983e633 in ?? () from /usr/lib/libchicken.so.6
#31 0x00007fdd898377ed in ?? () from /usr/lib/libchicken.so.6
#32 0x00007fdd89a39368 in CHICKEN_run () from /usr/lib/libchicken.so.6
#33 0x00007fdd89a3941b in CHICKEN_main () from /usr/lib/libchicken.so.6
#34 0x00007fdd88f9aead in __libc_start_main (main=<optimized out>,
argc=<optimized out>, ubp_av=<optimized out>,
init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>,
stack_end=0x7fffb7f96408)
at libc-start.c:228
#35 0x00000000004010b5 in _start ()
(gdb)
; A test program for the Cairo bindings
; Michael Bridgen <address@hidden>
; Tony Garnock-Jones <address@hidden>
(use fmt)
(use posix)
(use sdl)
(use cairo)
(import chicken scheme foreign)
;; only required on OS X
;; (declare
;; (foreign-declare "#include <SDL/SDL.h>\n")
;; (run-time-macros))
;; (foreign-code "SDL_Init(SDL_INIT_EVERYTHING);")
(sdl-init SDL_INIT_EVERYTHING)
(define maxx 640)
(define maxy 480)
(sdl-wm-set-caption "TestCairo" "TestCairo")
(define s (sdl-set-video-mode maxx maxy 0 (+ SDL_HWSURFACE
SDL_HWPALETTE
SDL_DOUBLEBUF)))
(define is (cairo-image-surface-create-for-data
(sdl-surface-pixels s)
CAIRO_FORMAT_RGB24 maxx maxy
(sdl-surface-pitch s)))
(define c (cairo-create is))
(define (draw-example c)
(define (tri)
(cairo-new-path c)
(cairo-move-to c 110 110)
(cairo-line-to c 110 190)
(cairo-line-to c 190 190)
(cairo-close-path c))
(define (radians degrees)
(* 3.142 (/ degrees 180)))
(define (sector x y d)
(cairo-new-path c)
(cairo-move-to c x y)
(cairo-line-to c (+ x d) y)
(cairo-line-to c (+ x d) (+ y d))
(cairo-arc c (+ x d) y d (radians 90) (radians 180)))
(sdl-fill-rect s (make-sdl-rect 0 0 maxx maxy) (sdl-map-rgb
(sdl-surface-pixel-format s) 0 0 0))
(cairo-set-source-rgba c 1 1 0 1)
(cairo-set-line-width c 20)
(cairo-new-path c)
(cairo-set-line-cap c CAIRO_LINE_CAP_BUTT)
(cairo-move-to c 10 10)
(cairo-line-to c 10 80)
(cairo-stroke c)
(cairo-new-path c)
(cairo-set-line-cap c CAIRO_LINE_CAP_ROUND)
(cairo-move-to c 50 10)
(cairo-line-to c 50 80)
(cairo-stroke c)
(cairo-new-path c)
(cairo-set-line-cap c CAIRO_LINE_CAP_SQUARE)
(cairo-move-to c 90 10)
(cairo-line-to c 90 80)
(cairo-stroke c)
(cairo-set-line-join c CAIRO_LINE_JOIN_BEVEL)
(cairo-set-line-width c 10)
(tri)
(cairo-set-source-rgb c 0 1 1)
(cairo-stroke c)
(tri)
(cairo-set-source-rgb c 1 0 1)
(cairo-fill c)
(sector 240 240 60)
(cairo-set-line-join c CAIRO_LINE_JOIN_MITER)
(cairo-set-source-rgb c 1 0.5 0)
(cairo-stroke c)
(cairo-reset-clip c)
(cairo-new-path c)
(cairo-rectangle c 30 240 70 300)
(cairo-clip c)
(cairo-new-path c)
(sector 20 250 100)
(cairo-set-source-rgb c 0 0.5 1)
(cairo-fill c)
(cairo-reset-clip c)
(sector 20 250 100)
(cairo-set-source-rgba c 0 0.5 1 0.3)
(cairo-fill c)
(cairo-select-font-face c "sans-serif" CAIRO_FONT_SLANT_NORMAL
CAIRO_FONT_WEIGHT_NORMAL)
(cairo-set-font-size c 30)
(cairo-move-to c 300 100)
(cairo-set-source-rgba c 1 1 1 1)
(cairo-show-text c "Chicken Cairo")
(let ((ext (make-cairo-text-extents-type)))
(cairo-text-extents c "Chicken Cairo" ext)
; (display ext)(newline)
(cairo-new-path c)
(cairo-rectangle c 300 100 (cairo-text-extents-width ext) (-
(cairo-text-extents-height ext)))
(cairo-set-source-rgba c 1 1 1 0.5)
(cairo-set-line-width c 2.0)
(cairo-stroke c)))
(draw-example c)
(sdl-flip s)
(let ((event (make-sdl-event))
(last-pos '(0 . 0))
(mouse-is-down #f))
(let loop ()
(sdl-wait-event! event)
(let ((t (sdl-event-type event)))
(cond ((= t SDL_MOUSEBUTTONDOWN)
(set! last-pos `(,(sdl-event-x event) . ,(sdl-event-y event)))
(set! mouse-is-down #t)
(fmt #t "saved mouse pos " last-pos nl))
((= t SDL_MOUSEMOTION)
(if mouse-is-down
(let* ((cur-x (sdl-event-x event))
(cur-y (sdl-event-y event))
(inc-x (- cur-x (car last-pos)))
(inc-y (- cur-y (cdr last-pos))))
(unless (and (eq? inc-x 0) (eq? inc-y 0))
(set! last-pos `(,cur-x . ,cur-y))
(fmt #t "transforming by " inc-x " " inc-y nl)
(cairo-translate c inc-x inc-y)
(draw-example c)
(sdl-flip s)))))
((= t SDL_MOUSEBUTTONUP)
(set! mouse-is-down #f))
((= t SDL_QUIT)
'done)))
(loop)))
(exit 0)
- [Chicken-users] segfault using cairo/SDL,
Markus Klotzbuecher <=