[Openmcl-devel] YAWC (Yet Another Weird Crash)

Ron Garret ron at awun.net
Thu May 28 14:52:17 PDT 2009

Still trying to display PDF files.  It's mostly working, but I've  
encountered another weird (to me) problem.  I can display multiple PDF  
files in multiple windows, but if I try to move a PDF file from one  
window to a different one I get crashes.  The two weird things are  
that the crashes are pretty reliable, but not 100% reproducible.   
Every now and then I get a session where the crash seems to not  
happen.  And also the crash is set up by moving a PDF from one window  
to another, but it doesn't actually happen until you try to scroll or  
resize the window.  Demo code follows.  I've already checked the  
obvious things like the reference counts on the PDF files dropping to  
zero and everything seems OK.


(in-package "CL-USER")

(objc:load-framework "Quartz" :quartz)
(defun nsstr (s) (make-instance 'gui::ns-lisp-string :string s))

(defun pdf-from-url (url)
   (make-instance ns:pdf-document :init-with-url
         (make-instance ns:ns-url :init-with-string url)))

(defun make-ns-window (x y &optional (title "Untitled"))
   (let ((nsw (make-instance 'ns:ns-window
             :with-content-rect (ns:make-ns-rect 0 0 x y)
             :style-mask 15
             :backing #$NSBackingStoreBuffered
             :defer t)))
       (#/setTitle: nsw (nsstr title))
       (#/setReleasedWhenClosed: nsw nil)
       (#/center nsw)
       (#/orderFront: nsw nil)

(setf p1 (pdf-from-url #@"http://www.flownet.com/ron/test.pdf"))
(setf v1 (#/init (#/alloc ns:pdf-view)))
(setf w1 (make-ns-window 400 600 "W1"))
(#/setContentView: w1 v1)

(setf p2 (pdf-from-url #@"http://www.flownet.com/ron/specials.pdf"))
(setf v2 (#/init (#/alloc ns:pdf-view)))
(setf w2 (make-ns-window 400 600 "W2"))
(#/setContentView: w2 v2)

(#/setDocument: v1 p1)
(#/setDocument: v2 p2)

(#/setDocument: v1 nil)
(#/setDocument: v1 p1)

(#/setDocument: v2 nil)
(#/setDocument: v2 p2)

; Stop here and try scrolling and resizing the windows.  It should  
still work.

(#/setDocument: v1 nil)
(#/setDocument: v2 nil)
(#/setDocument: v1 p2)
(#/setDocument: v2 p1)

; Scrolling and resizing at this point should cause CCL to crash

More information about the Openmcl-devel mailing list