Gauche > Archives > 2011/12/08

2011/12/08 16:35:20 UTCayatoy
#
質問です。lib/control/job.scmの73行目で(memq r '(done error killed))してるところってなんで(memq (job-status job) '(done error killed))じゃないんでしょうか。
#
あと、job-run!とjob-mark-killed!で(condition-variable-broadcast! job)してるのはどうしてですか?。
2011/12/08 16:50:02 UTCayatoy
#
job-waitはstatusを返すから
#
(define (job-wait job :optional (timeout #f) (timeout-val #f))
  (let ([mutex (job-waiter-mutex job)]
        [cv (job-waiter-cv job)])
    (unless (and mutex cv) (error "job is not waitable" job))
    (let loop ()
      (mutex-lock! mutex)
      (let1 s (job-status job)
        (cond [(memq s '(done error killed)) (mutex-unlock! mutex) s]
              [(mutex-unlock! mutex cv timeout) (loop)]
              [else timeout-val])))))
#
みたいな感じですかね。なんか勘違いしてたらすみません。
2011/12/08 17:21:18 UTCshiro
#
ども。それふたつともバグです。ってはてなのコメントに書いたんですが英語だったのでスパム扱いになってるかも。
2011/12/08 17:40:04 UTCayatoy
#
あ、スパム扱いになってました。失礼しました〜。