Script-fu gimp 2.4.1 causes seg fault on linux but not on win

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear gimp-developers,

 the following Script-fu written to test some of the new features of
the TinyScheme version of Script-fu seems to work perfectly on Windows
2000 pro (Gimp 2.4.1) but fails on Ubuntu 7.10 standard amd64 and on 
Ubuntu 7.10 i386.
	It runs for a variable time and fails on different directories/files
sometimes up to 300,000  files into a run. I am happy to directly help
you as much as I can and will furnish any data that you may need.

	regards David Martin

;;; originated by Jim Blandy <jimb@xxxxxxxxxxxx> --- July 1998 
;;; modified by David M. W. Martin to work with Gimp 2.4 Script-fu
18/11/07 
;;; works on win2000 32bit gimp 2.4.1 as far as I can see faultlessly
;;; causes segmentation fault on ubuntu 7.10 amd64 and i386 after
variable
;;; numbers of files sometimes 250,000 into run at similar places, 
;;; nothing strange about files it fails on, usually on changing to a
new dir.
;;; /usr/lib/gimp/2.0/plug-ins/script-fu: fatal error: Segmentation
fault
;;; gimp still runs but "Refresh Scripts" is missing and all Script-fu
entries
;;; gimp must be restarted! 

(define (test-for-each-file outputdevice dirname regex)
(let* ((count 0)                       ;initialise count
       (seconds  (car(gettimeofday)))) ;initialise time of day in
seconds
       
       (case outputdevice
        ((0) (gimp-message-set-handler ERROR-CONSOLE))
        ((1) (gimp-message-set-handler CONSOLE))
        ((2) (gimp-message-set-handler MESSAGE-BOX)))
        
(define (for-each-file perform-func-on root)
  (let visit ((root root));reset root
    (let ((should-recurse (perform-func-on root)))
      (if (and should-recurse (if (= (file-type root) FILE-TYPE-DIR)#t
#f));dir?
        (let ((dir (dir-open-stream  root)))
          (let loop ()
            (let ((entry (dir-read-entry dir)))
            (cond
                 ((eof-object? entry) #f) ;if eof signal false and drop
through
                 (( or (string=? entry ".") ;current directory or
                       (string=? entry "..")) ;parent directory
                   (loop));recurse loop
            (else(visit (string-append root DIR-SEPARATOR
entry)) ;recurse visit
                   (loop)) ;recurse loop
               ) ;end cond
            ) ;end let dir-read-entry
          ) ;end let loop
        ) ;end let dir-open-stream
     ) ;end if a dir
    ) ;end let should-recurse
  ) ;end of let visit
) ;end of for-each-file function 

(define (perform-func-on file)
  (set! count (+ count 1)) ;count files visited
    (if (re-match regex file) ;check regex
    (gimp-message (string-append "found "file " number "(number->string
count)))
    ) ;end if
    (gimp-message (string-append file " number "(number->string count)))
) ;end perform-func-on

(for-each-file perform-func-on dirname);main routine called from here
(gimp-message (string-append "elapsed seconds "
              (number->string (- (car(gettimeofday))  seconds))" count "
              (number->string count))) ; print elapsed time and number
of files
) ;end test-for-each-file let*	       
) ;end test-for-each-file

(script-fu-register 
  "test-for-each-file" 
 _"_test-for-each-file..." 
  "Chose output media, select directory to recurse from, 
  optional regular expression to be applied to each filename "
  "David(dot)Martin(at)sixtyfive(dot)plus(dot)com"
  "David Martin, 2007.  Public Domain GPL."
  "18/11/07 "
  ""
SF-OPTION  _"Message output device"  '("ERROR-CONSOLE" "CONSOLE"
"MESSAGE-BOX" )
SF-DIRNAME _"Directory" "/home/david/test_images"
SF-STRING    "File or Directory contains (regex)"            ".jpg$"
  )
(script-fu-menu-register "test-for-each-file"  "<Toolbox>/Xtns/")

;;; originated by Jim Blandy <jimb@xxxxxxxxxxxx> --- July 1998 
;;; modified by David M. W. Martin to work with Gimp 2.4 Script-fu 18/11/07 
;;; works on win2000 32bit gimp 2.4.1 as far as I can see faultlessly
;;; causes segmentation fault on ubuntu 7.10 amd64 and i386 after variable
;;; numbers of files sometimes 250,000 into run at similar places, 
;;; nothing strange about files it fails on, usually on changing to a new dir.
;;; /usr/lib/gimp/2.0/plug-ins/script-fu: fatal error: Segmentation fault
;;; gimp still runs but "Refresh Scripts" is missing and all Script-fu entries
;;; gimp must be restarted! 

(define (test-for-each-file outputdevice dirname regex)
(let* ((count 0)                       ;initialise count
       (seconds  (car(gettimeofday)))) ;initialise time of day in seconds
       
       (case outputdevice
        ((0) (gimp-message-set-handler ERROR-CONSOLE))
        ((1) (gimp-message-set-handler CONSOLE))
        ((2) (gimp-message-set-handler MESSAGE-BOX)))
        
(define (for-each-file perform-func-on root)
  (let visit ((root root));reset root
    (let ((should-recurse (perform-func-on root)))
      (if (and should-recurse (if (= (file-type root) FILE-TYPE-DIR)#t #f));dir?
        (let ((dir (dir-open-stream  root)))
          (let loop ()
            (let ((entry (dir-read-entry dir)))
            (cond
                 ((eof-object? entry) #f) ;if eof signal false and drop through
                 (( or (string=? entry ".") ;current directory or
                       (string=? entry "..")) ;parent directory
                   (loop));recurse loop
            (else(visit (string-append root DIR-SEPARATOR entry)) ;recurse visit
                   (loop)) ;recurse loop
               ) ;end cond
            ) ;end let dir-read-entry
          ) ;end let loop
        ) ;end let dir-open-stream
     ) ;end if a dir
    ) ;end let should-recurse
  ) ;end of let visit
) ;end of for-each-file function 

(define (perform-func-on file)
  (set! count (+ count 1)) ;count files visited
    (if (re-match regex file) ;check regex
    (gimp-message (string-append "found "file " number "(number->string count)))
    ) ;end if
    (gimp-message (string-append file " number "(number->string count)))
) ;end perform-func-on

(for-each-file perform-func-on dirname);main routine called from here
(gimp-message (string-append "elapsed seconds "
              (number->string (- (car(gettimeofday))  seconds))" count "
              (number->string count))) ; print elapsed time and number of files
) ;end test-for-each-file let*	       
) ;end test-for-each-file

(script-fu-register 
  "test-for-each-file" 
 _"_test-for-each-file..." 
  "Chose output media, select directory to recurse from, 
  optional regular expression to be applied to each filename "
  "David(dot)Martin(at)sixtyfive(dot)plus(dot)com"
  "David Martin, 2007.  Public Domain GPL."
  "18/11/07 "
  ""
SF-OPTION  _"Message output device"  '("ERROR-CONSOLE" "CONSOLE" "MESSAGE-BOX" )
SF-DIRNAME _"Directory" "/home/david/test_images"
SF-STRING    "File or Directory contains (regex)"            ".jpg$"
  )
(script-fu-menu-register "test-for-each-file"  "<Toolbox>/Xtns/")
_______________________________________________
Gimp-developer mailing list
Gimp-developer@xxxxxxxxxxxxxxxxxxxxxx
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer

[Index of Archives]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [GIMP for Windows]     [KDE]     [GEGL]     [Gimp's Home]     [Gimp on GUI]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux