[cells-devel] First time for me: Currrent DP not GE pulse x .... ?!?

Kenneth Tilton kentilton at gmail.com
Mon Jun 29 13:25:57 UTC 2009



Frank Goenninger wrote:
> Hi all Cells-users:
> 
> It is the first time I get a
> 
> Current DP 1 not GE pulse 4 of cell
> (NIL . <vld>)<4:A ASCENDER/HELVETICA = NIL>
>     [Condition of type SIMPLE-ERROR]
> 
> error. This code throws the error:
> 
> (defun c-pulse-update (c key)
>    (declare (ignorable key))
>    (unless (find key '(:valid-uninfluenced))
>      (trc nil "!!!!!!! c-pulse-update updating !!!!!!!!!!" *data-pulse- 
> id* c key :prior-pulse (c-pulse c)))
>    (assert (>= *data-pulse-id* (c-pulse c)) ()
>      "Current DP ~a not GE pulse ~a of cell ~a" *data-pulse-id* (c- 
> pulse c) c)
>    (setf (c-pulse c) *data-pulse-id*))
> 
> Backtrace:
>    0: (ERROR "Current DP ~a not GE pulse ~a of cell ~a" 1 4 (NIL .  
> <vld>)<4:A ASCENDER/HELVETICA = NIL>)
>    1: (CELLS::C-PULSE-UPDATE (NIL . <vld>)<4:A ASCENDER/HELVETICA =  
> NIL> :VALID-UNINFLUENCED)
>        Locals:
>          CELLS::C = (NIL . <vld>)<4:A ASCENDER/HELVETICA = NIL>
>          CELLS::KEY = :VALID-UNINFLUENCED
>          CELLS::C = (NIL . <vld>)<4:A ASCENDER/HELVETICA = NIL>
>          #:|g38499| = #(0 NIL ..)
>    2: (CELLS::ENSURE-VALUE-IS-CURRENT (NIL . <vld>)<4:A ASCENDER/ 
> HELVETICA = NIL> :C-READ NIL)
>    3: ((:INTERNAL CELLS::CELL-READ 0) NIL NIL)
>    4: (CELLS::CALL-WITH-INTEGRITY NIL NIL #<Closure (:INTERNAL  
> CELLS::CELL-READ 0) @ #x10e6b8da> NIL)
>    5: (CELLS::CELL-READ (NIL . <vld>)<4:A ASCENDER/HELVETICA = NIL>)
>    6: (CELLS::MD-SLOT-VALUE HELVETICA CNX::ASCENDER)
>    7: ((METHOD CNX::ASCENDER (CNX::CELLO-FONT)) HELVETICA)
>    8: ((METHOD CNX::FONT-ASCENDER (CNX::CELLO-CONTROL)) FRGO-TEXT-1)
>        Locals:
>          CELLS:SELF = FRGO-TEXT-1
>    9: ((:INTERNAL (MOP:CLASS-DEFAULT-INITARGS CNX::CNX-TEXT :LT) 0)  
> dirty<0:A LT/FRGO-TEXT-1 = NIL>)
>   10: (CELLS::CALCULATE-AND-LINK dirty<0:A LT/FRGO-TEXT-1 = NIL>)
>   11: ((FLET CELLS::CALCULATE-AND-SET CELLS::BODY))
>   12: (CELLS::CALCULATE-AND-SET dirty<0:A LT/FRGO-TEXT-1 = NIL> :FN- 
> AWAKEN-CELL NIL)
>   13: ((METHOD CELLS::AWAKEN-CELL (CELLS::C-RULED)) dirty<0:A LT/FRGO- 
> TEXT-1 = NIL>)
>   14: ((METHOD CELLS:MD-AWAKEN (CELLS::MODEL-OBJECT)) FRGO-TEXT-1)
>   15: ((METHOD CELLS:MD-AWAKEN :AROUND (CELLS::MODEL-OBJECT)) FRGO- 
> TEXT-1)
>   16: ((:INTERNAL (:EFFECTIVE-METHOD 1 NIL NIL T T) 0) FRGO-TEXT-1)
>   17: ((:INTERNAL (:INTERNAL (METHOD SHARED-INITIALIZE :AFTER #) 0)  
> 0) :AWAKEN FRGO-TEXT-1)
>   18: (CELLS::JUST-DO-IT :AWAKEN)
>   19: (CELLS::FINISH-BUSINESS)
>   20: ((FLET CELLS::CALL-WITH-INTEGRITY CELLS::GO-GO))
>   21: (CELLS::CALL-WITH-INTEGRITY NIL NIL #<Closure (:INTERNAL CTK:: 
> %RUN-WINDOW 0) [CELLO-NX-TEST-MAIN-WINDOW] @ #x10dd0fea> NIL)
>   22: (CTK::%RUN-WINDOW)
>   23: (CTK::%DO-RUN-WINDOW)
>   24: (CTK:RUN-WINDOW CNX-TEST::CELLO-NX-TEST-MAIN-WINDOW)
>   25: (CNX-TEST:TEST-MAIN)
> 
> 
> Now - questions I have are:
> 
> What does :valid-uninfluenced actually mean? 

When cell X changes, another cell C becomes current with that change aka 
valid one of two ways: cell C gets recalculated, or the cells engine 
determines C does not depend directly or indirectly on X. The latter 
case is "valid and uninfluenced".

> Is the code above correct  

Yes.

> or should the assertion be inside the (unless ...) form? What is the  
> logic behind?

The logic is that it is impossible for a cell pulse to get ahead of 
*data-pulse-id* without something being broken in the Cells engine, so 
the engine yells if it sees that.

I have encountered this myself, and it is indeed rare. It arose because 
I had a model instance lying around from a previous iteration. I forget 
/exactly/ how I did that, but it was trickier than just doing something 
silly like use a global variable to hold onto some data. ie, It might 
take some digging to figure out how an old instance is still in play. 
Wish I could remember the deets.

kt





More information about the cells-devel mailing list