Segfaultign even with heap patch applied pasted by arthurmaciel on Thu Feb 7 23:44:11 2013
$ csc implementations.scm -o implementations && ./implementations Adding edges (List in hash-table) Segmentation fault ------------------------------------------------------------------------- (use extras srfi-69 srfi-1) ;; Conventions: ;; nht = nested hash tables ;; lht = list in hash table ;; s-node = source node (of edge) ;; d-node = destination node (of edge) (define (lht-graph) (define g (make-hash-table)) (define (id) "List in hash-table") (define (add-edge! s-node d-node #!optional (property 'none)) (hash-table-update!/default g s-node (lambda (v) (cons (cons d-node property) v)) (list (cons d-node property)))) (define (remove-edge! s-node d-node) (let ((edges (hash-table-ref/default g s-node #f))) (if edges (delete! d-node edges)))) (define (has-node? node) (hash-table-exists? g node)) (define (has-edge? s-node d-node) (member d-node (hash-table-ref/default g s-node '()))) (define (graph->alist) (hash-table-map g (lambda(k v) (cons k v)))) (define (serialize #!optional (file "graph.txt")) (with-output-to-file file (lambda () (pp (graph->alist))))) ;; Dispatcher (lambda (selector) (case selector ((id) id) ;;((add-node!) add-node!) ((add-edge!) add-edge!) ((remove-edge!) remove-edge!) ((has-edge?) has-edge?) ((has-node?) has-node?) ((graph->alist) graph->alist) ((serialize) serialize) (else (error "Uknown procedure"))))) (define (nht-graph) (define g (make-hash-table)) (define (id) "Nested hash-tables") (define (add-edge! s-node d-node #!optional (property 'none)) (let ((edges (hash-table-ref/default g s-node #f))) (if edges (hash-table-set! edges d-node property) (hash-table-set! g s-node (alist->hash-table `((,d-node . ,property))))))) (define (remove-edge! s-node d-node) (let ((edges (hash-table-ref/default g s-node #f))) (if edges (hash-table-delete! edges d-node) #f))) (define (has-node? node) (hash-table-exists? g node)) (define (has-edge? s-node d-node) (let ((edges (hash-table-ref/default g s-node #f))) (if edges (hash-table-exists? edges d-node) #f))) (define (graph->alist) (hash-table-map g (lambda(k v) (cons k (hash-table->alist v))))) (define (serialize #!optional (file "graph.txt")) (with-output-to-file file (lambda () (pp (graph->alist))))) ;; Dispatcher (lambda (selector) (case selector ((id) id) ;;((add-node!) add-node!) ((add-edge!) add-edge!) ((remove-edge!) remove-edge!) ((has-edge?) has-edge?) ((has-node?) has-node?) ((graph->alist) graph->alist) ((serialize) serialize) (else (error "Uknown procedure"))))) (define (make-graph #!optional (impl 'lht)) (case impl ((lht) (lht-graph)) ((nht) (nht-graph)))) ;; Test case (define VERTEXES 25000) (define EDGES 1000) (define (add-edges g) (printf "~N Adding edges (~A)~N" ((g 'id))) (do ((n 0 (+ n 1))) ((= n VERTEXES)) (do ((e 0 (+ e 1))) ((= e EDGES)) ((g 'add-edge!) n (+ e 1))))) (define (del-edges g) (printf "~N Removing edges (~A)~N" ((g 'id))) (do ((n 0 (+ n 1))) ((= n VERTEXES)) (do ((e 0 (+ e 1))) ((= e EDGES)) ((g 'remove-edge!) n (+ e 1))))) (define (check-nodes g) (printf "~N Checking nodes (~A)~N" ((g 'id))) (do ((n 0 (+ n 1))) ((= n VERTEXES)) (g 'has-node?) n)) (define (check-edges g) (printf "~N Checking edges (~A)~N" ((g 'id))) (do ((n 0 (+ n 1))) ((= n VERTEXES)) (do ((e 0 (+ e 1))) ((= e EDGES)) ((g 'has-edge?) n (+ e 1))))) (define (serialize-to-file g) (printf "~N Serializing to file (~A)~N" ((g 'id))) ((g 'serialize))) (define (run-test graph) (time (add-edges graph)) ;; (pp ((graph 'graph->alist))) (time (serialize-to-file graph)) (time (check-nodes graph)) (time (check-edges graph)) (time (del-edges graph))) (define lht-graph (make-graph 'lht)) (define nht-graph (make-graph 'nht)) (run-test lht-graph) (printf "~N-----------------------------------------------------------------~N") (run-test nht-graph)
Segfaulting even with heap patch applied added by arthurmaciel on Fri Feb 8 00:02:25 2013
$ csc implementations.scm -o implementations && ./implementations -:d [debug] application startup... [debug] heap resized to 1048576 bytes [debug] stack bottom is 0x7fff73d7e160. [debug] entering toplevel toplevel... [debug] entering toplevel library_toplevel... [debug] entering toplevel build_2dversion_toplevel... [debug] entering toplevel eval_toplevel... [debug] resizing mutation-stack from 8k to 16k ... [debug] entering toplevel expand_toplevel... [debug] entering toplevel modules_toplevel... [debug] resizing mutation-stack from 16k to 32k ... [debug] entering toplevel extras_toplevel... [debug] entering toplevel data_2dstructures_toplevel... [debug] entering toplevel ports_toplevel... [debug] entering toplevel srfi_2d69_toplevel... [debug] entering toplevel srfi_2d1_toplevel... Adding edges (List in hash-table) [debug] resizing heap dynamically from 1024k to 2048k ... [debug] resizing heap dynamically from 2048k to 4096k ... [debug] resizing heap dynamically from 4096k to 8192k ... [debug] resizing heap dynamically from 8192k to 16384k ... [debug] resizing heap dynamically from 16384k to 32768k ... [debug] resizing heap dynamically from 32768k to 65536k ... [debug] resizing heap dynamically from 65536k to 131072k ... [debug] resizing heap dynamically from 131072k to 262144k ... [debug] resizing heap dynamically from 262144k to 524288k ... [debug] resizing heap dynamically from 524288k to 1048576k ... [debug] resizing heap dynamically from 1048576k to 2097151k ... Error: call of non-procedure: #<hash-table (22308)> Call history: implementations.scm:116: g implementations.scm:114: g172 implementations.scm:15: hash-table-update!/default implementations.scm:116: g implementations.scm:114: g172 implementations.scm:15: hash-table-update!/default implementations.scm:116: g implementations.scm:114: g172 implementations.scm:15: hash-table-update!/default implementations.scm:116: g implementations.scm:114: g172 implementations.scm:15: hash-table-update!/default implementations.scm:116: g implementations.scm:114: g172 implementations.scm:15: hash-table-update!/default implementations.scm:116: g <--