no title pasted by anonymous on Fri Mar 8 18:07:25 2013

#>
int callback_fd = -1;
int callback_id = -1;

static int chicken_callback (int cb_id){
  callback_id = cb_id;

  if (callback_fd >= 0) {
    write(callback_fd, "-", 1);
    return(-1);
  }
  return(0);
}
<#

(define-external callback_fd int -1)
(define-external callback_id int -1)


(define our-func
  (foreign-value "&chicken_callback" (function bool (int))))

(define miau
  (make-mutex))
(define ready 
  (make-condition-variable 'testo))

(thread-start!
 (make-thread
  (lambda ()
    (mutex-lock! miau)
    (let-values (((in out) (create-pipe)))
      (set! callback_fd out)
      (let ((in* (open-input-file* in)))
	(condition-variable-signal! ready)
	(print "entering the loop")
	(let loop ()
	  (print "starting to sit on the pipe")
	  (thread-wait-for-i/o! in)
	  (print "zzZzZzz !!! whoa whats on?")

	  (read-char in*)
	  (print "aha ok got that...")

	  (print "dont speak to me till im finished!!")
	  (mutex-lock! miau)
	  (thread-sleep! 1)
	  (condition-variable-signal! ready)

	  (loop)))))))
(mutex-unlock! miau ready)

(let loop ()
  (print "lets wake him up!")

  (dyncall bool our-func (int 1))
  (mutex-unlock! miau ready)

  (print "ok let him sleep\n")
  (thread-sleep! 1)
  (loop))

no title added by anonymous on Fri Mar 8 18:12:17 2013

(mutex-lock! miau)
(thread-start!
 (make-thread
  (lambda ()    
    (let-values (((in out) (create-pipe)))
      (set! callback_fd out)
      (let ((in* (open-input-file* in)))
	(condition-variable-signal! ready)
	(print "entering the loop")
	(let loop ()
	  (print "starting to sit on the pipe")
	  (thread-wait-for-i/o! in)
	  (print "zzZzZzz !!! whoa whats on?")

	  (read-char in*)
	  (print "aha ok got that...")

	  (print "dont speak to me till im finished!!")
	  (mutex-lock! miau)
	  (thread-sleep! 1)
	  (print "done!")
	  (condition-variable-signal! ready)

	  (loop)))))))
(mutex-unlock! miau ready)