anchor.diff:  
   (pushnew 'after-gc-hook ext:*after-gc-hooks*)
   (after-gc-hook)
  +
  +
  +;;;; Timeouts and idle functions
  +
  +(defvar *source-callback-marshal*
  +  (system:foreign-symbol-address "source_callback_marshal"))
  +(defvar *destroy-notify*
  +  (system:foreign-symbol-address "destroy_notify"))
  +
  +(defbinding (timeout-add "g_timeout_add_full")
  +    (function interval &optional (priority 0)) unsigned-int 
  +  (priority int)
  +  (interval unsigned-int)
  +  (*source-callback-marshal* pointer)
  +  ((register-callback-function function) unsigned-long)
  +  (*destroy-notify* pointer))
  +
  +(defbinding (idle-add "g_idle_add_full")
  +    (function &optional (priority 0)) unsigned-int 
  +  (priority int)
  +  (*source-callback-marshal* pointer)
  +  ((register-callback-function function) unsigned-long)
  +  (*destroy-notify* pointer))
   
   
   
  
positive.code: (defbinding lisp-callback-closure-new () gclosure
    (callback-id unsigned-int))
  
  
  
  ;;;; Callback mechanism
  
  (defun register-callback-function (function)
    (check-type function (or null symbol function))
    (lisp-callback-closure-new (register-user-data function)))
  
  (defun callback-trampoline (callback-id params return-value)
    (let* ((return-type (unless (null-pointer-p return-value)
  			(type-from-number (gvalue-type return-value))))
  	 (args nil)
  	 (callback-function (find-user-data callback-id)))
  
  
negative.code: 		   (unwind-protect
  		       (let ((result (apply callback-function (reverse args))))
  			 (when return-type
  			   (gvalue-set (print return-value) result))))
  		
  		 (continue nil :report "Return from callback function"
  		  (when return-type
  