[Openmcl-devel] Stack/Frame corruption?

Neil Baylis neil.baylis at gmail.com
Sun Aug 29 18:53:44 UTC 2010


In the following function, I think I'm seeing some kind of stack/frame
corruption.

This happens with dx86cl64 when running my ca-multilayer demo (posted
earlier today).

(defun place-layer (layer center theta radius)
  (format t "~A~%" (* radius (cos theta)))
  (#/removeAllAnimations layer)     ;Causes corruption here
  (let* ((cx (+ (ns:ns-point-x center) (* radius (cos theta))))
         (cy (+ (ns:ns-point-y center) (* radius (sin theta))))
         (gp (make-record :<CGP>oint x (cgfl cx) y (cgfl cy))))
;    (#/removeAllAnimations layer)    ;Does not cause corruption here
    (#/setPosition: layer gp)
    (set-layer-angle layer (cgfl (+ theta (radians 45) (radians (/ radius
1.25)))))
    (free gp)))

The failure scenario is when both theta and radius take the values 0.0D0. I
get the following:

CL-USER> 0.0D0
> Error: value #<BOGUS object @ #x7FFF5FBFEA1D> is not of the expected type
REAL.
> While executing: (:INTERNAL |-[CADemoView mouseDown:]|), in process
Initial(0).


;;;
;;; #<APPKIT-PROCESS Initial(0) [Active] #x3020000B528D> requires access to
Shared Terminal Input
;;; Type (:y 0) to yield control to this thread.
;;;
(:y 0)


;;;
;;; Shared Terminal Input is now owned by #<APPKIT-PROCESS Initial(0)
[Active] #x3020000B528D>
;;;

> Type :POP to abort, :R for a list of available restarts.
> Type :? for other options.
CL-USER> (b)
 (44B9F8) : 0 (FUNCALL #'#<(:INTERNAL |-[CADemoView mouseDown:]|)>
#<TYPE-ERROR #x30200213F99D>) 141
 (44BA20) : 1 (SIGNAL #<TYPE-ERROR #x30200213F99D>) 973
 (44BA78) : 2 (%ERROR #<TYPE-ERROR #x30200213F99D> NIL 563047) 117
 (44BAA0) : 3 (FUNCALL #'#<CCL::DEFAULT-REQUIRE-TYPE-RESTARTS> 563047
#<BOGUS object @ #x7FFF5FBFEA1D> REAL) 1069
 (44BB38) : 4 (%SHORT-FLOAT #<BOGUS object @ #x7FFF5FBFEA1D>) 237
 (44BB60) : 5 (COS #<BOGUS object @ #x7FFF5FBFEA1D>) 413
 (44BB78) : 6 (PLACE-LAYER #<CA-LAYER <CALayer: 0x1e1b80> (#x1E1B80)>
#<NS-POINT 400,400 [gcable] (#x5A3C10) #x30200213FD0D> #<BOGUS object @
#x7FFF5FBFEA1D> 0.0D0) 549
 (44BBC0) : 7 (LAYOUT-RADIAL (#<CA-LAYER <CALayer: 0x1e1b80> (#x1E1B80)>)
#<NS-POINT 400,400 [gcable] (#x5A3C10) #x30200213FD0D> #<NS-POINT 400,400
[gcable] (#x5A3C10) #x30200213FD0D>) 565
 (44BC30) : 8 (FUNCALL #'#<|-[CADemoView mouseDown:]|> 17591849975144) 1461
 (44BCC0) : 9 (%PASCAL-FUNCTIONS% 307 17591849975144) 365
 (44BD78) : 10 (FUNCALL #'#<Anonymous Function #x302000C82F9F> #<A Foreign
Pointer [stack-allocated] (:* #) #x7FFF5FBFF0F0> #<A Foreign Pointer
#x7FFF81A78B60> #<NS-EVENT NSEvent: type=LMouseDown loc=(497,195)
time=176165.2 flags=0x100 win=0x0 winNum=1633 ctxt=0x0 evNum=5627 click=1
buttonNumber=0 pressure=1 (#x5A3920)>) 373
 (44BDA8) : 11 (%CALL-NEXT-OBJC-METHOD #<LISP-APPLICATION <LispApplication:
0x567ae0> (#x567AE0)> #<OBJC:OBJC-CLASS GUI::LISP-APPLICATION (#x55C2D0)>
#<A Foreign Pointer #x7FFF81A78B60> (:VOID :ID) #<NS-EVENT NSEvent:
type=LMouseDown loc=(497,195) time=176165.2 flags=0x100 win=0x0 winNum=1633
ctxt=0x0 evNum=5627 click=1 buttonNumber=0 pressure=1 (#x5A3920)>) 773
 (44BE08) : 12 (FUNCALL #'#<GUI::|-[LispApplication sendEvent:]|>
17591849975368) 965
 (44BE78) : 13 (%PASCAL-FUNCTIONS% 15 17591849975368) 365
 (44BF30) : 14 (FUNCALL #'#<Anonymous Function #x302000B9EAFF>
#<LISP-APPLICATION <LispApplication: 0x567ae0> (#x567AE0)>
#S(CCL::OBJC-SELECTOR :NAME "run" :%SEL #<A Foreign Pointer
#x7FFF81A78B3C>)) 173
 (44BF50) : 15 (FUNCALL #'#<(:OBJC-DISPATCH NEXTSTEP-FUNCTIONS:|run|)> ???)
565
 (44BF88) : 16 (EVENT-LOOP NIL) 421
CL-USER> (:f 6)
 (44BB78) : 6 (PLACE-LAYER #<CA-LAYER <CALayer: 0x1e1b80> (#x1E1B80)>
#<NS-POINT 400,400 [gcable] (#x5A3C10) #x30200213FD0D> #<BOGUS object @
#x7FFF5FBFEA1D> 0.0D0) 549
  (LAYER CENTER THETA RADIUS)
   LAYER: #<CA-LAYER <CALayer: 0x1e1b80> (#x1E1B80)>
   CENTER: #<NS-POINT 400,400 [gcable] (#x5A3C10) #x30200213FD0D>
   THETA: #<BOGUS object @ #x7FFF5FBFEA1D>
   RADIUS: 0.0D0

Note that it successfully prints the value of (* radius (cos theta)) before
it errors out while computing cx in the let* form.

If I move the call to #/removeAllAnimations to inside the let* form, I do
not see the error. (See commented out statement).

When it hits this error, it also corrupts some local variables in the frame
of the calling function.

Neil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.clozure.com/pipermail/openmcl-devel/attachments/20100829/66e57dab/attachment.html>


More information about the Openmcl-devel mailing list