From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Julian Graham" Newsgroups: gmane.lisp.guile.devel Subject: Re: thread cancellation, take 2 Date: Sun, 23 Sep 2007 01:16:24 -0400 Message-ID: <2bc5f8210709222216rf7aa8ednd380fa8db2975073@mail.gmail.com> References: <2bc5f8210709200730q61d7973ft8d1da14889efb2f1@mail.gmail.com> <87abrhl604.fsf@laas.fr> <2bc5f8210709200836i1267bcc8qa066b4d27f2c3e2@mail.gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_41461_31481156.1190524584706" X-Trace: sea.gmane.org 1190524602 5296 80.91.229.12 (23 Sep 2007 05:16:42 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Sun, 23 Sep 2007 05:16:42 +0000 (UTC) To: "=?ISO-8859-1?Q?Ludovic_Court=E8s?=" , guile-devel@gnu.org Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Sun Sep 23 07:16:37 2007 Return-path: Envelope-to: guile-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1IZJpd-0008KY-6n for guile-devel@m.gmane.org; Sun, 23 Sep 2007 07:16:37 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IZJpa-0001T1-Dc for guile-devel@m.gmane.org; Sun, 23 Sep 2007 01:16:34 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IZJpW-0001Qx-6u for guile-devel@gnu.org; Sun, 23 Sep 2007 01:16:30 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IZJpU-0001PF-LV for guile-devel@gnu.org; Sun, 23 Sep 2007 01:16:28 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IZJpU-0001P9-DH for guile-devel@gnu.org; Sun, 23 Sep 2007 01:16:28 -0400 Original-Received: from fk-out-0910.google.com ([209.85.128.191]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IZJpT-0001QE-PA for guile-devel@gnu.org; Sun, 23 Sep 2007 01:16:28 -0400 Original-Received: by fk-out-0910.google.com with SMTP id 19so1452642fkr for ; Sat, 22 Sep 2007 22:16:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; bh=RY6x4fOBVcBW+/a55R9COuNALm+XhAY9KqRHzQFvURA=; b=iRAuLoBf2e4QDOrUk1IAp3+IHgqQ2wCcvomJVNLd048QpXSe7kcekst8qrq/1/3wbbsDG+KfJ2hoWnzBByQ524wYl44xD4gB6Iq/zGSNuh90VDOHL8c7WGbxc5zl6yel9xxQaiwQqZp4MbDYNQCLfyrsp4kS0PmFzrlhe7KOXVo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=SPH2mXSLeAeCzRuPaZ8JuWNhWecfXvkKcK0inDwBP+t4uD1MBwl2BAL9oDFDCl6lcJRTbMsZBajOGK7xogLtLUVK8mhFCWYyNGWCDzuAMchOc3IlInjKYLHKx49A1sOXDAFlcjUTXaEPExqaAySoi62rLJd7cnq/95Vc8x/Z7WY= Original-Received: by 10.82.106.14 with SMTP id e14mr3429320buc.1190524584718; Sat, 22 Sep 2007 22:16:24 -0700 (PDT) Original-Received: by 10.82.175.11 with HTTP; Sat, 22 Sep 2007 22:16:24 -0700 (PDT) In-Reply-To: <2bc5f8210709200836i1267bcc8qa066b4d27f2c3e2@mail.gmail.com> X-Detected-Kernel: Linux 2.6 (newer, 2) X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Errors-To: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.devel:6807 Archived-At: ------=_Part_41461_31481156.1190524584706 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Alright -- I think I've got it working. After mucking about for a bit with asyncs, I realized that it makes more sense to evaluate cleanup handlers in do_thread_exit -- and evaluation should happen there anyway, since pthreads says cleanup handlers get called when the thread exits for any reason, not just cancellation. Duh. The patch I've attached adds three new public functions: cancel-thread, push-thread-cleanup, and pop-thread-cleanup. API documentation on their behavior is included in the changes. I've never submitted a patch for Guile before, so I've likely made a few mistakes in formatting, etc., and I don't really know the vetting procedure. I hope I've gotten the main bits right, though. Please let me know if there are any changes I should make. On 9/20/07, Julian Graham wrote: > > Would it be possible to defer execution of the Scheme code (cleanup > > handlers) to after the C cleanup handler has been called? > > > > I.e., the C handler would push the Scheme handlers to a list that would > > be eventually executed, when Guile is back into a "clean", regular > > state. > > Yeah, that would be fine -- except that after the thread is signaled > for cancellation, it'll never go back into a regular state. That is, > I think the next thing that happens is that the thread-local exit > handlers (on_thread_exit in threads.c) get called -- and I don't think > that code evaluates queued asyncs (please let me know if it actually > does!). And any queued asyncs would have to be evaluated within that > thread (and in order), because people are going to want to do things > that have to be done from within a particular thread, like unlock > mutexes. > > > I'd prefer thunks as well, it looks more Schemey. > > I agree -- and makes things way easier if it turns out it's possible > to do this with asyncs. > ------=_Part_41461_31481156.1190524584706 Content-Type: text/x-patch; name="thread-cancellation.HEAD.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="thread-cancellation.HEAD.patch" X-Attachment-Id: f_f6x3iw8d PyB0aHJlYWQtY2FuY2VsbGF0aW9uLkhFQUQucGF0Y2gKSW5kZXg6IG51bGwtdGhyZWFkcy5oCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9zb3VyY2VzL2d1aWxlL2d1aWxlL2d1aWxlLWNvcmUvbGliZ3Vp bGUvbnVsbC10aHJlYWRzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcjEu MTIgbnVsbC10aHJlYWRzLmgKLS0tIG51bGwtdGhyZWFkcy5oCTE3IEFwciAyMDA2IDAwOjA1OjQw IC0wMDAwCTEuMTIKKysrIG51bGwtdGhyZWFkcy5oCTIzIFNlcCAyMDA3IDA0OjU3OjI3IC0wMDAw CkBAIC00MSw2ICs0MSw3IEBACiAjZGVmaW5lIHNjbV9pX3B0aHJlYWRfY3JlYXRlKHQsYSxmLGQp ICAgICAgICgqKHQpPTAsICh2b2lkKShmKSwgRU5PU1lTKQogI2RlZmluZSBzY21faV9wdGhyZWFk X2RldGFjaCh0KSAgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHNjbV9pX3B0 aHJlYWRfZXhpdCh2KSAgICAgICAgICAgICAgIGV4aXQoMCkKKyNkZWZpbmUgc2NtX2lfcHRocmVh ZF9jYW5jZWwodCkgICAgICAgICAgICAgMAogI2RlZmluZSBzY21faV9zY2hlZF95aWVsZCgpICAg ICAgICAgICAgICAgICAwCiAKIC8qIFNpZ25hbHMKSW5kZXg6IHB0aHJlYWQtdGhyZWFkcy5oCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9zb3VyY2VzL2d1aWxlL2d1aWxlL2d1aWxlLWNvcmUvbGliZ3Vp bGUvcHRocmVhZC10aHJlYWRzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtdSAt cjEuMTUgcHRocmVhZC10aHJlYWRzLmgKLS0tIHB0aHJlYWQtdGhyZWFkcy5oCTkgT2N0IDIwMDYg MjM6MjE6MDAgLTAwMDAJMS4xNQorKysgcHRocmVhZC10aHJlYWRzLmgJMjMgU2VwIDIwMDcgMDQ6 NTc6MjcgLTAwMDAKQEAgLTM1LDYgKzM1LDcgQEAKICNkZWZpbmUgc2NtX2lfcHRocmVhZF9jcmVh dGUgICAgICAgICAgICAgICAgcHRocmVhZF9jcmVhdGUKICNkZWZpbmUgc2NtX2lfcHRocmVhZF9k ZXRhY2ggICAgICAgICAgICAgICAgcHRocmVhZF9kZXRhY2gKICNkZWZpbmUgc2NtX2lfcHRocmVh ZF9leGl0ICAgICAgICAgICAgICAgICAgcHRocmVhZF9leGl0CisjZGVmaW5lIHNjbV9pX3B0aHJl YWRfY2FuY2VsICAgICAgICAgICAgICAgIHB0aHJlYWRfY2FuY2VsCiAjZGVmaW5lIHNjbV9pX3Nj aGVkX3lpZWxkICAgICAgICAgICAgICAgICAgIHNjaGVkX3lpZWxkCiAKIC8qIFNpZ25hbHMKSW5k ZXg6IHRocmVhZHMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvc291cmNlcy9ndWlsZS9ndWlsZS9n dWlsZS1jb3JlL2xpYmd1aWxlL3RocmVhZHMuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44OApk aWZmIC11IC1yMS44OCB0aHJlYWRzLmMKLS0tIHRocmVhZHMuYwkxNSBKYW4gMjAwNyAyMzozNToz NCAtMDAwMAkxLjg4CisrKyB0aHJlYWRzLmMJMjMgU2VwIDIwMDcgMDQ6NTc6MzEgLTAwMDAKQEAg LTEzMSw2ICsxMzEsNyBAQAogewogICBzY21faV90aHJlYWQgKnQgPSBTQ01fSV9USFJFQURfREFU QSAob2JqKTsKICAgc2NtX2djX21hcmsgKHQtPnJlc3VsdCk7CisgIHNjbV9nY19tYXJrICh0LT5j bGVhbnVwX2hhbmRsZXJzKTsKICAgc2NtX2djX21hcmsgKHQtPmpvaW5fcXVldWUpOwogICBzY21f Z2NfbWFyayAodC0+ZHlud2luZHMpOwogICBzY21fZ2NfbWFyayAodC0+YWN0aXZlX2FzeW5jcyk7 CkBAIC00MTUsNiArNDE2LDcgQEAKICAgdC0+cHRocmVhZCA9IHNjbV9pX3B0aHJlYWRfc2VsZiAo KTsKICAgdC0+aGFuZGxlID0gU0NNX0JPT0xfRjsKICAgdC0+cmVzdWx0ID0gU0NNX0JPT0xfRjsK KyAgdC0+Y2xlYW51cF9oYW5kbGVycyA9IFNDTV9FT0w7CiAgIHQtPmpvaW5fcXVldWUgPSBTQ01f RU9MOwogICB0LT5keW5hbWljX3N0YXRlID0gU0NNX0JPT0xfRjsKICAgdC0+ZHlud2luZHMgPSBT Q01fRU9MOwpAQCAtNDM0LDYgKzQzNiw3IEBACiAgIHNjbV9pX3B0aHJlYWRfbXV0ZXhfaW5pdCAo JnQtPmhlYXBfbXV0ZXgsIE5VTEwpOwogICB0LT5jbGVhcl9mcmVlbGlzdHNfcCA9IDA7CiAgIHQt PmdjX3J1bm5pbmdfcCA9IDA7CisgIHQtPmNhbmNlbGVkID0gMDsKICAgdC0+ZXhpdGVkID0gMDsK IAogICB0LT5mcmVlbGlzdCA9IFNDTV9FT0w7CkBAIC00NzMsMTIgKzQ3NiwzMiBAQAogICB0LT5i bG9ja19hc3luY3MgPSAwOwogfQogCitzdGF0aWMgU0NNIGhhbmRsZV9jbGVhbnVwX2hhbmRsZXIo dm9pZCAqY29udCwgU0NNIHRhZywgU0NNIGFyZ3MpIHsKKyAgKigoaW50ICopIGNvbnQpID0gMDsK KyAgcmV0dXJuIHNjbV9oYW5kbGVfYnlfbWVzc2FnZV9ub2V4aXQoTlVMTCwgdGFnLCBhcmdzKTsK KyAgcmV0dXJuIFNDTV9VTkRFRklORUQ7Cit9CisKIC8qIFBlcmZvcm0gdGhyZWFkIHRlYXItZG93 biwgaW4gZ3VpbGUgbW9kZS4KICAqLwogc3RhdGljIHZvaWQgKgogZG9fdGhyZWFkX2V4aXQgKHZv aWQgKnYpCiB7Ci0gIHNjbV9pX3RocmVhZCAqdCA9IChzY21faV90aHJlYWQgKil2OworICBzY21f aV90aHJlYWQgKnQgPSAoc2NtX2lfdGhyZWFkICopIHY7CisKKyAgd2hpbGUoIXNjbV9pc19lcSh0 LT5jbGVhbnVwX2hhbmRsZXJzLCBTQ01fRU9MKSkgCisgICAgeworICAgICAgaW50IGNvbnQgPSAx OworICAgICAgU0NNIHB0ciA9IFNDTV9DQVIodC0+Y2xlYW51cF9oYW5kbGVycyk7CisgICAgICB0 LT5jbGVhbnVwX2hhbmRsZXJzID0gU0NNX0NEUih0LT5jbGVhbnVwX2hhbmRsZXJzKTsKKyAgICAg IHQtPnJlc3VsdCA9IHNjbV9pbnRlcm5hbF9jYXRjaCAoU0NNX0JPT0xfVCwgCisJCQkJICAgICAg KHNjbV90X2NhdGNoX2JvZHkpIHNjbV9jYWxsXzAsIHB0ciwgCisJCQkJICAgICAgaGFuZGxlX2Ns ZWFudXBfaGFuZGxlciwgJmNvbnQpOworICAgICAgaWYgKCFjb250KQorCXsKKwkgIGJyZWFrOwor CX0KKyAgICB9CiAKICAgc2NtX2lfc2NtX3B0aHJlYWRfbXV0ZXhfbG9jayAoJnRocmVhZF9hZG1p bl9tdXRleCk7CiAKQEAgLTQ4OSw2ICs1MTIsNyBAQAogICAgIDsKIAogICBzY21faV9wdGhyZWFk X211dGV4X3VubG9jayAoJnRocmVhZF9hZG1pbl9tdXRleCk7CisKICAgcmV0dXJuIE5VTEw7CiB9 CiAKQEAgLTg4Miw2ICs5MDYsNzggQEAKIH0KICN1bmRlZiBGVU5DX05BTUUKIAorU0NNX0RFRklO RSAoc2NtX2NhbmNlbF90aHJlYWQsICJjYW5jZWwtdGhyZWFkIiwgMSwgMCwgMCwKKwkgICAgKFND TSB0aHJlYWQpLAorIkFzeW5jaHJvbm91c2x5IGZvcmNlIHRoZSB0YXJnZXQgQHZhcnt0aHJlYWR9 IHRvIHRlcm1pbmF0ZS4gQHZhcnt0aHJlYWR9ICIKKyJjYW5ub3QgYmUgdGhlIGN1cnJlbnQgdGhy ZWFkLCBhbmQgaWYgQHZhcnt0aHJlYWR9IGhhcyBhbHJlYWR5IHRlcm1pbmF0ZWQgb3IgIgorImJl ZW4gc2lnbmFsZWQgdG8gdGVybWluYXRlLCB0aGlzIGZ1bmN0aW9uIGlzIGEgbm8tb3AuIikKKyNk ZWZpbmUgRlVOQ19OQU1FIHNfc2NtX2NhbmNlbF90aHJlYWQKK3sKKyAgc2NtX2lfdGhyZWFkICp0 ID0gTlVMTDsKKworICBTQ01fVkFMSURBVEVfVEhSRUFEICgxLCB0aHJlYWQpOworICB0ID0gU0NN X0lfVEhSRUFEX0RBVEEgKHRocmVhZCk7CisgIGlmICh0ID09IFNDTV9JX0NVUlJFTlRfVEhSRUFE KQorICAgIHsKKyAgICAgIFNDTV9NSVNDX0VSUk9SICgiY2Fubm90IGNhbmNlbCB0aGUgY3VycmVu dCB0aHJlYWQiLCBTQ01fRU9MKTsKKyAgICB9CisgIHNjbV9pX3NjbV9wdGhyZWFkX211dGV4X2xv Y2sgKCZ0aHJlYWRfYWRtaW5fbXV0ZXgpOworICBpZiAoIXQtPmNhbmNlbGVkKQorICAgIHsKKyAg ICAgIHQtPmNhbmNlbGVkID0gMTsKKyAgICAgIHNjbV9pX3B0aHJlYWRfY2FuY2VsKHQtPnB0aHJl YWQpOworICAgIH0KKyAgc2NtX2lfcHRocmVhZF9tdXRleF91bmxvY2sgKCZ0aHJlYWRfYWRtaW5f bXV0ZXgpOworICByZXR1cm4gU0NNX1VOREVGSU5FRDsKK30KKyN1bmRlZiBGVU5DX05BTUUKKwor U0NNX0RFRklORSAoc2NtX3B1c2hfdGhyZWFkX2NsZWFudXAsICJwdXNoLXRocmVhZC1jbGVhbnVw IiwgMSwgMCwgMCwKKwkgICAgKFNDTSBwcm9jKSwKKyJBZGQgdGhlIHRodW5rIEB2YXJ7cHJvY30g dG8gdGhlIGZyb250IG9mIHRoZSBsaXN0IG9mIGNsZWFudXAgaGFuZGxlcnMgZm9yICIKKyJ0aGUg Y3VycmVudCB0aHJlYWQuIFRoZXNlIGhhbmRsZXJzIHdpbGwgYmUgY2FsbGVkIGluIGEgTElGTyBt YW5uZXIgd2hlbiB0aGUgIgorImN1cnJlbnQgdGhyZWFkIGV4aXRzLiIpCisjZGVmaW5lIEZVTkNf TkFNRSBzX3NjbV9wdXNoX3RocmVhZF9jbGVhbnVwCit7CisgIHNjbV9pX3RocmVhZCAqdGhyZWFk ID0gU0NNX0lfQ1VSUkVOVF9USFJFQUQ7CisgIGlmICghc2NtX2lzX2VxIChzY21fdGh1bmtfcCAo cHJvYyksIFNDTV9CT09MX1QpKQorICAgIHsKKyAgICAgIFNDTV9NSVNDX0VSUk9SICgicHJvYyBt dXN0IGJlIGEgdGh1bmsiLCBTQ01fRU9MKTsKKyAgICB9CisgIHNjbV9pX3NjbV9wdGhyZWFkX211 dGV4X2xvY2sgKCZ0aHJlYWRfYWRtaW5fbXV0ZXgpOworICB0aHJlYWQtPmNsZWFudXBfaGFuZGxl cnMgPSBzY21fY29ucyAocHJvYywgdGhyZWFkLT5jbGVhbnVwX2hhbmRsZXJzKTsKKyAgc2NtX2lf cHRocmVhZF9tdXRleF91bmxvY2sgKCZ0aHJlYWRfYWRtaW5fbXV0ZXgpOworICByZXR1cm4gU0NN X0JPT0xfVDsKK30KKyN1bmRlZiBGVU5DX05BTUUKKworU0NNX0RFRklORSAoc2NtX3BvcF90aHJl YWRfY2xlYW51cCwgInBvcC10aHJlYWQtY2xlYW51cCIsIDAsIDEsIDAsCisJICAgIChTQ00gZXZh bHApLAorIlJlbW92ZSB0aGUgbW9zdCByZWNlbnRseSBhZGRlZCBjbGVhbnVwIGhhbmRsZXIgZnJv bSB0aGUgY3VycmVudCB0aHJlYWQncyAiCisibGlzdCBvZiBjbGVhbnVwIGhhbmRsZXJzLiBJZiBA Y2Fye2V2YWxwfSBpcyBzcGVjaWZpZWQgYW5kIGV2YWx1YXRlcyB0byAiCisidHJ1ZSwgdGhlIGNs ZWFudXAgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBhcyBpdCBpcyByZW1vdmVkLiIpCisjZGVmaW5l IEZVTkNfTkFNRSBzX3NjbV9wb3BfdGhyZWFkX2NsZWFudXAKK3sKKyAgc2NtX2lfdGhyZWFkICp0 aHJlYWQgPSBTQ01fSV9DVVJSRU5UX1RIUkVBRDsKKyAgc2NtX2lfc2NtX3B0aHJlYWRfbXV0ZXhf bG9jayAoJnRocmVhZF9hZG1pbl9tdXRleCk7CisgIGlmICghc2NtX2lzX2VxICh0aHJlYWQtPmNs ZWFudXBfaGFuZGxlcnMsIFNDTV9FT0wpKQorICAgIHsKKyAgICAgIFNDTSByZXQgPSBTQ01fQk9P TF9UOworICAgICAgU0NNIHB0ciA9IFNDTV9DQVIgKHRocmVhZC0+Y2xlYW51cF9oYW5kbGVycyk7 CisgICAgICB0aHJlYWQtPmNsZWFudXBfaGFuZGxlcnMgPSBTQ01fQ0RSICh0aHJlYWQtPmNsZWFu dXBfaGFuZGxlcnMpOworICAgICAgc2NtX2lfcHRocmVhZF9tdXRleF91bmxvY2sgKCZ0aHJlYWRf YWRtaW5fbXV0ZXgpOworICAgICAgaWYgKCFzY21faXNfZXEgKGV2YWxwLCBTQ01fQk9PTF9GKSkK Kwl7CisJICByZXQgPSBzY21fY2FsbF8wIChwdHIpOworCX0KKyAgICAgIHRocmVhZC0+Y2xlYW51 cF9oYW5kbGVycyA9IFNDTV9DRFIgKHRocmVhZC0+Y2xlYW51cF9oYW5kbGVycyk7CisgICAgICBy ZXR1cm4gcmV0OworICAgIH0KKyAgc2NtX2lfcHRocmVhZF9tdXRleF91bmxvY2sgKCZ0aHJlYWRf YWRtaW5fbXV0ZXgpOworICByZXR1cm4gU0NNX0JPT0xfRjsKK30KKyN1bmRlZiBGVU5DX05BTUUK KwogU0NNX0RFRklORSAoc2NtX2pvaW5fdGhyZWFkLCAiam9pbi10aHJlYWQiLCAxLCAwLCAwLAog CSAgICAoU0NNIHRocmVhZCksCiAiU3VzcGVuZCBleGVjdXRpb24gb2YgdGhlIGNhbGxpbmcgdGhy ZWFkIHVudGlsIHRoZSB0YXJnZXQgQHZhcnt0aHJlYWR9ICIKSW5kZXg6IHRocmVhZHMuaAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiAvc291cmNlcy9ndWlsZS9ndWlsZS9ndWlsZS1jb3JlL2xpYmd1aWxl L3RocmVhZHMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40OApkaWZmIC11IC1yMS40OCB0aHJl YWRzLmgKLS0tIHRocmVhZHMuaAkxNyBBcHIgMjAwNiAwMDowNTo0MiAtMDAwMAkxLjQ4CisrKyB0 aHJlYWRzLmgJMjMgU2VwIDIwMDcgMDQ6NTc6MzEgLTAwMDAKQEAgLTQ5LDkgKzQ5LDExIEBACiAK ICAgU0NNIGhhbmRsZTsKICAgc2NtX2lfcHRocmVhZF90IHB0aHJlYWQ7Ci0gIAorCisgIFNDTSBj bGVhbnVwX2hhbmRsZXJzOwogICBTQ00gam9pbl9xdWV1ZTsKICAgU0NNIHJlc3VsdDsKKyAgaW50 IGNhbmNlbGVkOwogICBpbnQgZXhpdGVkOwogCiAgIFNDTSBzbGVlcF9vYmplY3Q7CkBAIC0xNTMs NiArMTU1LDkgQEAKIAogU0NNX0FQSSBTQ00gc2NtX2NhbGxfd2l0aF9uZXdfdGhyZWFkIChTQ00g dGh1bmssIFNDTSBoYW5kbGVyKTsKIFNDTV9BUEkgU0NNIHNjbV95aWVsZCAodm9pZCk7CitTQ01f QVBJIFNDTSBzY21fY2FuY2VsX3RocmVhZCAoU0NNIHQpOworU0NNX0FQSSBTQ00gc2NtX3B1c2hf dGhyZWFkX2NsZWFudXAgKFNDTSB0aHVuayk7CitTQ01fQVBJIFNDTSBzY21fcG9wX3RocmVhZF9j bGVhbnVwIChTQ00gZXZhbHApOwogU0NNX0FQSSBTQ00gc2NtX2pvaW5fdGhyZWFkIChTQ00gdCk7 CiAKIFNDTV9BUEkgU0NNIHNjbV9tYWtlX211dGV4ICh2b2lkKTsK ------=_Part_41461_31481156.1190524584706 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ------=_Part_41461_31481156.1190524584706--