From unknown Sun Jun 22 08:00:04 2025 X-Loop: help-debbugs@gnu.org Subject: bug#21887: 'monitor' form broken Resent-From: taylanbayirli@gmail.com (Taylan Ulrich =?UTF-8?Q?Bay=C4=B1rl=C4=B1/Kammer?=) Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Thu, 12 Nov 2015 15:31:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 21887 X-GNU-PR-Package: guile X-GNU-PR-Keywords: To: 21887@debbugs.gnu.org X-Debbugs-Original-To: bug-guile@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.144734220716607 (code B ref -1); Thu, 12 Nov 2015 15:31:03 +0000 Received: (at submit) by debbugs.gnu.org; 12 Nov 2015 15:30:07 +0000 Received: from localhost ([127.0.0.1]:34882 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Zwtp3-0004JT-EG for submit@debbugs.gnu.org; Thu, 12 Nov 2015 10:30:04 -0500 Received: from eggs.gnu.org ([208.118.235.92]:54830) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Zwtoi-0004Ii-OC for submit@debbugs.gnu.org; Thu, 12 Nov 2015 10:29:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zwtoh-0005L4-Eu for submit@debbugs.gnu.org; Thu, 12 Nov 2015 10:29:40 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:51556) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zwtoh-0005L0-Bi for submit@debbugs.gnu.org; Thu, 12 Nov 2015 10:29:39 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36591) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zwtoc-0001rR-N7 for bug-guile@gnu.org; Thu, 12 Nov 2015 10:29:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zwtob-0005KH-MC for bug-guile@gnu.org; Thu, 12 Nov 2015 10:29:34 -0500 Received: from mail-wm0-x229.google.com ([2a00:1450:400c:c09::229]:37476) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zwtob-0005KD-Ft for bug-guile@gnu.org; Thu, 12 Nov 2015 10:29:33 -0500 Received: by wmww144 with SMTP id w144so93458803wmw.0 for ; Thu, 12 Nov 2015 07:29:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:user-agent:mime-version :content-type; bh=letWYKqsb7ZO5fAgumbiaG3iwzhL3Xxf+ImSVzKA4sw=; b=v7TvKH6t0Yx8y09ubh9Wer5GM3WO7o+WQa0lnAQAeERz4OAE0WGoiKSrFWrOICWvYG f1qlol/j1voHZb+9cb6xMo23RFYNxaOmtBWYD9HXY5fahONZWdJWRWRwVtKx27nq8hJd hQVyb0272PV13+Hhqct5wjWnufdy4a07dYTtK3N21/f1oIAu3aZrA4Wm78SR5doN1RjA PiiROuIYrnMlPlr4Raq39o3uuIi8OhJ9rQfaweR46m1a5fUWKQFkz8fGDXqnZItRMTTg LPz6lEevV3rWy+knAcETuCiSnSRu8TA/DDm6SdC3sz88NzrEThDiBlUYig2q7OxRWlPD BCrg== X-Received: by 10.194.201.202 with SMTP id kc10mr19628294wjc.84.1447342172188; Thu, 12 Nov 2015 07:29:32 -0800 (PST) Received: from T420.taylan ([2a02:908:c32:4740:221:ccff:fe66:68f0]) by smtp.gmail.com with ESMTPSA id 71sm15562884wmt.15.2015.11.12.07.29.30 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Nov 2015 07:29:31 -0800 (PST) From: taylanbayirli@gmail.com (Taylan Ulrich =?UTF-8?Q?Bay=C4=B1rl=C4=B1/Kammer?=) Date: Thu, 12 Nov 2015 16:29:30 +0100 Message-ID: <87vb97s0bp.fsf@T420.taylan> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.0 (----) It seems that the 'monitor' form is currently a no-op. The form (par-for-each (lambda (x) (monitor (foo))) xs) should be functionally equivalent to (let ((mutex (make-mutex))) (par-for-each (lambda (x) (with-mutex mutex (foo))) xs)) but currently becomes (par-for-each (lambda (x) (let ((mutex (make-mutex))) (with-mutex mutex (foo)))) xs) which is ineffective. I don't know what's the best way to fix this. The simplest thing that comes to my mind is something along the lines of: (define-syntax monitor (lambda (stx) (syntax-case stx () ((_ body body* ...) (let ((uuid (generate-uuid))) #`(with-mutex (mutex-with-uuid #,uuid) body body* ...)))))) where mutex-with-uuid looks it up from a hash table at run-time and instantiates it when it doesn't exist, this operation also being synchronized across threads, like: (define mutex-table (make-hash-table)) (define mutex-table-mutex (make-mutex)) (define (mutex-with-uuid uuid) (with-mutex mutex-table-mutex (or (hash-ref mutex-table uuid) (let ((mutex (make-mutex))) (hash-set! mutex-table uuid mutex) mutex)))) If that looks OK, I can try to make a proper patch from it. I'm not sure what I'd use in place of `generate-uuid' though. Would `gensym' be good enough? Shameless advertisement: with SRFI-126, the (or (hash-ref ...) ...) bit would have been just: (hashtable-intern! mutex-table uuid make-mutex) It's borrowed from MIT/GNU Scheme. Seems pretty useful. Taylan From unknown Sun Jun 22 08:00:04 2025 X-Loop: help-debbugs@gnu.org Subject: bug#21887: 'monitor' form broken Resent-From: Andy Wingo Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Fri, 24 Jun 2016 16:05:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 21887 X-GNU-PR-Package: guile X-GNU-PR-Keywords: To: taylanbayirli@gmail.com (Taylan Ulrich "=?UTF-8?Q?Bay=C4=B1rl=C4=B1/Kammer?=") Cc: 21887@debbugs.gnu.org Received: via spool by 21887-submit@debbugs.gnu.org id=B21887.146678425727348 (code B ref 21887); Fri, 24 Jun 2016 16:05:01 +0000 Received: (at 21887) by debbugs.gnu.org; 24 Jun 2016 16:04:17 +0000 Received: from localhost ([127.0.0.1]:54526 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bGTab-000772-9t for submit@debbugs.gnu.org; Fri, 24 Jun 2016 12:04:17 -0400 Received: from pb-sasl1.pobox.com ([64.147.108.66]:61199 helo=sasl.smtp.pobox.com) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bGTaZ-00076r-ID for 21887@debbugs.gnu.org; Fri, 24 Jun 2016 12:04:15 -0400 Received: from sasl.smtp.pobox.com (unknown [127.0.0.1]) by pb-sasl1.pobox.com (Postfix) with ESMTP id 2A9981F7BC; Fri, 24 Jun 2016 12:04:14 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=from:to:cc :subject:references:date:in-reply-to:message-id:mime-version :content-type:content-transfer-encoding; s=sasl; bh=oxhTcTekIoe3 L5FrMY0s+TEdCYY=; b=eAwWCMqNpKvrxmwTCNnLb6S323sG2N8UAUNsNBi77Wjt ihNIVER/EekiVUHpNAz+jLNrx//gbOcPkQE07YTe5KWmY8gPYxpLoPVBaEATdZZj WT4u0LR9d3FCpnFu8jLqZcSRQi//iSNyk7A9bYF5Vwi2arCnEyW15ktg7nX9a00= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=from:to:cc :subject:references:date:in-reply-to:message-id:mime-version :content-type:content-transfer-encoding; q=dns; s=sasl; b=OnamtM R/yqrXAT2f8wgRoFjvVn7ukBuLeb3BC4T8lZedEgWgVWO8WHaT7xrQy7sn+JSfpO jG+x/438XYQD3t2aE4OrgT23wzymbfrvjNZVCbH2mBD05cLRVacL8Mr2jyJKCykl Br7VNwPv8quD9idFQ+IJbCaRo6AoekbrAxP8M= Received: from pb-sasl1.nyi.icgroup.com (unknown [127.0.0.1]) by pb-sasl1.pobox.com (Postfix) with ESMTP id 0E44E1F7BB; Fri, 24 Jun 2016 12:04:14 -0400 (EDT) Received: from clucks (unknown [88.160.190.192]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by pb-sasl1.pobox.com (Postfix) with ESMTPSA id 39BFD1F7B9; Fri, 24 Jun 2016 12:04:13 -0400 (EDT) From: Andy Wingo References: <87vb97s0bp.fsf@T420.taylan> Date: Fri, 24 Jun 2016 18:04:06 +0200 In-Reply-To: <87vb97s0bp.fsf@T420.taylan> ("Taylan Ulrich \"=?UTF-8?Q?Bay=C4=B1rl=C4=B1/Kammer\?=""'s message of "Thu, 12 Nov 2015 16:29:30 +0100") Message-ID: <87inwyefpl.fsf@pobox.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Pobox-Relay-ID: 4B588E04-3A25-11E6-B689-C1836462E9F6-02397024!pb-sasl1.pobox.com X-Spam-Score: -1.4 (-) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.4 (-) Hi Taylan, On Thu 12 Nov 2015 16:29, taylanbayirli@gmail.com (Taylan Ulrich "Bay=C4=B1= rl=C4=B1/Kammer") writes: > It seems that the 'monitor' form is currently a no-op. The form > > (par-for-each (lambda (x) > (monitor > (foo))) > xs) > > should be functionally equivalent to > > (let ((mutex (make-mutex))) > (par-for-each (lambda (x) > (with-mutex mutex > (foo))) > xs)) > > but currently becomes > > (par-for-each (lambda (x) > (let ((mutex (make-mutex))) > (with-mutex mutex > (foo)))) > xs) > > which is ineffective. > > I don't know what's the best way to fix this. The simplest thing that > comes to my mind is something along the lines of: > > (define-syntax monitor > (lambda (stx) > (syntax-case stx () > ((_ body body* ...) > (let ((uuid (generate-uuid))) > #`(with-mutex (mutex-with-uuid #,uuid) > body body* ...)))))) > > where mutex-with-uuid looks it up from a hash table at run-time and > instantiates it when it doesn't exist, this operation also being > synchronized across threads, like: > > (define mutex-table (make-hash-table)) > > (define mutex-table-mutex (make-mutex)) > > (define (mutex-with-uuid uuid) > (with-mutex mutex-table-mutex > (or (hash-ref mutex-table uuid) > (let ((mutex (make-mutex))) > (hash-set! mutex-table uuid mutex) > mutex)))) > > If that looks OK, I can try to make a proper patch from it. I'm not > sure what I'd use in place of `generate-uuid' though. Would `gensym' be > good enough? You're totally right on all points. Please do prepare a patch :) I wish we could do something faster for the "embedded" mutex but correctness should come first. Cheers, Andy From unknown Sun Jun 22 08:00:04 2025 X-Loop: help-debbugs@gnu.org Subject: bug#21887: 'monitor' form broken Resent-From: taylanbayirli@gmail.com (Taylan Ulrich =?UTF-8?Q?Bay=C4=B1rl=C4=B1/Kammer?=) Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Sat, 25 Jun 2016 14:52:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 21887 X-GNU-PR-Package: guile X-GNU-PR-Keywords: To: Andy Wingo Cc: 21887@debbugs.gnu.org Received: via spool by 21887-submit@debbugs.gnu.org id=B21887.146686629522873 (code B ref 21887); Sat, 25 Jun 2016 14:52:01 +0000 Received: (at 21887) by debbugs.gnu.org; 25 Jun 2016 14:51:35 +0000 Received: from localhost ([127.0.0.1]:55612 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bGovn-0005wr-JZ for submit@debbugs.gnu.org; Sat, 25 Jun 2016 10:51:35 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:35667) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bGovl-0005wf-Vd for 21887@debbugs.gnu.org; Sat, 25 Jun 2016 10:51:34 -0400 Received: by mail-wm0-f68.google.com with SMTP id a66so12781931wme.2 for <21887@debbugs.gnu.org>; Sat, 25 Jun 2016 07:51:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=qJ2RVOOTRZ5gDH1Q6MGixwWyzkNX7ZChsr2n0kx32Ms=; b=cmjaCwg7j7a2T0f7IWpV58FWsWTsxHHJKXDE+oXI/gyMm6GsZTvFZjpmu/VHC2bhE7 9U41KupzsDos5XJZxMbJm/bYKnL06idaAwo51oFWS2lUZAMb7LuCEL1aoa/9OsQIhrzx 2K2sQrAvADq770z3mpkeoM/7LUhxwK8lZqsYjZVqz4GB6cCcc5FaJmk6mdaI+81WbVH8 Br8AiTaQhDArLVsFp+tPzfYVEUo9e5R9Fkv9vRDgpp6XKgE8c0P0Ltci6xwxHXRBImww V04ch9G1WBEHljrhmbB6QXayymGBo8R/YiMae1lapYkeNwkSkukzlTloEMcfXqkqh/4d 2blg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=qJ2RVOOTRZ5gDH1Q6MGixwWyzkNX7ZChsr2n0kx32Ms=; b=QosNFq/RV4EYak0N9HfflVJWDbdjVKR+7DbadOqLUsXt1QQSe/g7EHXdhcjkQGMzm9 e5nVu5G5qdnu6D8fX4p3NPTLLtiWvL98s8pepsas14oj9J+VD5zdCLbWeRlJmLvqckti 4zioXAh6uJ9Ta0lfjICXc07kwqMWBioWYldGBmJWJPEyns2GveFINPsdocT2qIrkwc2F NipkOW3cYqHjo+legzZQNvWFgYyVnBaP/tmC6Nh5HzHsbK5KylBM5NUhPrYSwWjy+eC1 dVNd6J0Ztl8qY2dNVvseTBhPNo/5PH2oJGCDO/Or9ulSPDTaHEaI1fP7KF1/4IQkP0Sf XoQQ== X-Gm-Message-State: ALyK8tLWYYrwh/evLlgLLJd9Z/LnjVHZPM2D0eiy4FF9z7iVtiXQQgk+QlTFWLTmp5P4NA== X-Received: by 10.28.29.146 with SMTP id d140mr3174767wmd.27.1466866288329; Sat, 25 Jun 2016 07:51:28 -0700 (PDT) Received: from T420.taylan ([2a02:908:c30:3540:221:ccff:fe66:68f0]) by smtp.gmail.com with ESMTPSA id k6sm10317270wjz.28.2016.06.25.07.51.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 25 Jun 2016 07:51:27 -0700 (PDT) From: taylanbayirli@gmail.com (Taylan Ulrich =?UTF-8?Q?Bay=C4=B1rl=C4=B1/Kammer?=) References: <87vb97s0bp.fsf@T420.taylan> <87inwyefpl.fsf@pobox.com> Date: Sat, 25 Jun 2016 16:51:26 +0200 In-Reply-To: <87inwyefpl.fsf@pobox.com> (Andy Wingo's message of "Fri, 24 Jun 2016 18:04:06 +0200") Message-ID: <87wpldgw41.fsf@T420.taylan> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.7 (/) --=-=-= Content-Type: text/plain Here's a patch, tested minimally by running (par-for-each (lambda (x) (monitor (sleep 1) (display "foo\n"))) (iota 10)) on a quad-core. Previously it would print the "foo"s in groups of four with a second between each group; now it prints them one by one with a second between each, as should be. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-Fix-monitor-macro.patch >From 08c7f4cd98c86fbb6551c7c0b6f17262c67e7b23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Taylan=20Ulrich=20Bay=C4=B1rl=C4=B1/Kammer?= Date: Sat, 25 Jun 2016 16:43:36 +0200 Subject: [PATCH] Fix 'monitor' macro. * module/ice-9/threads.scm (monitor-mutex-table) (monitor-mutex-table-mutex, monitor-mutex-with-id): New variables. (monitor): Fix it. --- module/ice-9/threads.scm | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/module/ice-9/threads.scm b/module/ice-9/threads.scm index 9f9e1bf..14da113 100644 --- a/module/ice-9/threads.scm +++ b/module/ice-9/threads.scm @@ -85,9 +85,24 @@ (lambda () (begin e0 e1 ...)) (lambda () (unlock-mutex x))))) -(define-syntax-rule (monitor first rest ...) - (with-mutex (make-mutex) - first rest ...)) +(define monitor-mutex-table (make-hash-table)) + +(define monitor-mutex-table-mutex (make-mutex)) + +(define (monitor-mutex-with-id id) + (with-mutex monitor-mutex-table-mutex + (or (hashq-ref monitor-mutex-table id) + (let ((mutex (make-mutex))) + (hashq-set! monitor-mutex-table id mutex) + mutex)))) + +(define-syntax monitor + (lambda (stx) + (syntax-case stx () + ((_ body body* ...) + (let ((id (datum->syntax #'body (gensym)))) + #`(with-mutex (monitor-mutex-with-id '#,id) + body body* ...)))))) (define (par-mapper mapper cons) (lambda (proc . lists) -- 2.8.4 --=-=-=-- From unknown Sun Jun 22 08:00:04 2025 X-Loop: help-debbugs@gnu.org Subject: bug#21887: 'monitor' form broken Resent-From: Andy Wingo Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Mon, 27 Jun 2016 07:34:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 21887 X-GNU-PR-Package: guile X-GNU-PR-Keywords: To: taylanbayirli@gmail.com (Taylan Ulrich "=?UTF-8?Q?Bay=C4=B1rl=C4=B1/Kammer?=") Cc: 21887@debbugs.gnu.org Received: via spool by 21887-submit@debbugs.gnu.org id=B21887.146701280928964 (code B ref 21887); Mon, 27 Jun 2016 07:34:02 +0000 Received: (at 21887) by debbugs.gnu.org; 27 Jun 2016 07:33:29 +0000 Received: from localhost ([127.0.0.1]:57403 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bHR2u-0007X5-SC for submit@debbugs.gnu.org; Mon, 27 Jun 2016 03:33:29 -0400 Received: from pb-sasl1.pobox.com ([64.147.108.66]:63254 helo=sasl.smtp.pobox.com) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bHR2t-0007Wx-Uf for 21887@debbugs.gnu.org; Mon, 27 Jun 2016 03:33:28 -0400 Received: from sasl.smtp.pobox.com (unknown [127.0.0.1]) by pb-sasl1.pobox.com (Postfix) with ESMTP id 587C220108; Mon, 27 Jun 2016 03:33:25 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=from:to:cc :subject:references:date:in-reply-to:message-id:mime-version :content-type:content-transfer-encoding; s=sasl; bh=iB6gT0atW8V1 V+apvYW1R1zmWfA=; b=VGvA2fMxXB1fLLGxzrhDPMAx7bXW9uxbciKXbX94i1Kz nJrr/5PR+409+uolzqb60whTq7OLfO3bQmSwLqaqTkUjBJ6OtBiVfI7NqGGZtAuC dbJHxu02aU/LnmFKo0O/BzKpa6hn27CWp+b/eqQ3myVXXFJic8J38iC8nT09IOY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=from:to:cc :subject:references:date:in-reply-to:message-id:mime-version :content-type:content-transfer-encoding; q=dns; s=sasl; b=FFINo5 rxTUY90hevE31jeliDYg2qjlOhww/Ht5+pAbz986378yC2cvqdwz/4298/kVVukX Nuf4YrBADSSqNa7b9BZMZfxrf1EEOJUTA6P7ddxoOUKuaCTH2Ji0GDtvixHHHzGj rSZeI/Fp1qON4sOU7qvkGBRez4cOjtrUKHwtI= Received: from pb-sasl1.nyi.icgroup.com (unknown [127.0.0.1]) by pb-sasl1.pobox.com (Postfix) with ESMTP id 50EE020107; Mon, 27 Jun 2016 03:33:25 -0400 (EDT) Received: from clucks (unknown [88.160.190.192]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by pb-sasl1.pobox.com (Postfix) with ESMTPSA id 7030A20106; Mon, 27 Jun 2016 03:33:24 -0400 (EDT) From: Andy Wingo References: <87vb97s0bp.fsf@T420.taylan> <87inwyefpl.fsf@pobox.com> <87wpldgw41.fsf@T420.taylan> Date: Mon, 27 Jun 2016 09:33:16 +0200 In-Reply-To: <87wpldgw41.fsf@T420.taylan> ("Taylan Ulrich \"=?UTF-8?Q?Bay=C4=B1rl=C4=B1/Kammer\?=""'s message of "Sat, 25 Jun 2016 16:51:26 +0200") Message-ID: <87wplb9jcz.fsf@pobox.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Pobox-Relay-ID: 6E95C362-3C39-11E6-86AC-C1836462E9F6-02397024!pb-sasl1.pobox.com X-Spam-Score: -1.0 (-) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On Sat 25 Jun 2016 16:51, taylanbayirli@gmail.com (Taylan Ulrich "Bay=C4=B1= rl=C4=B1/Kammer") writes: > Here's a patch, tested minimally by running > > (par-for-each (lambda (x) > (monitor > (sleep 1) > (display "foo\n"))) > (iota 10)) > > on a quad-core. Previously it would print the "foo"s in groups of four > with a second between each group; now it prints them one by one with a > second between each, as should be. Applied, thanks! Andy From unknown Sun Jun 22 08:00:04 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: taylanbayirli@gmail.com (Taylan Ulrich =?UTF-8?Q?Bay=C4=B1rl=C4=B1/Kammer?=) Subject: bug#21887: closed (Re: bug#21887: 'monitor' form broken) Message-ID: References: <87shvz9jcf.fsf@pobox.com> <87vb97s0bp.fsf@T420.taylan> X-Gnu-PR-Message: they-closed 21887 X-Gnu-PR-Package: guile Reply-To: 21887@debbugs.gnu.org Date: Mon, 27 Jun 2016 07:34:03 +0000 Content-Type: multipart/mixed; boundary="----------=_1467012843-29033-1" This is a multi-part message in MIME format... ------------=_1467012843-29033-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #21887: 'monitor' form broken which was filed against the guile package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 21887@debbugs.gnu.org. --=20 21887: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D21887 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1467012843-29033-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 21887-done) by debbugs.gnu.org; 27 Jun 2016 07:33:46 +0000 Received: from localhost ([127.0.0.1]:57406 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bHR3C-0007Xg-47 for submit@debbugs.gnu.org; Mon, 27 Jun 2016 03:33:46 -0400 Received: from pb-sasl1.pobox.com ([64.147.108.66]:63682 helo=sasl.smtp.pobox.com) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bHR3A-0007XZ-WA for 21887-done@debbugs.gnu.org; Mon, 27 Jun 2016 03:33:45 -0400 Received: from sasl.smtp.pobox.com (unknown [127.0.0.1]) by pb-sasl1.pobox.com (Postfix) with ESMTP id D11DA2010B for <21887-done@debbugs.gnu.org>; Mon, 27 Jun 2016 03:33:44 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=from:to :subject:references:date:in-reply-to:message-id:mime-version :content-type; s=sasl; bh=SSLmt0XI2dI3P81icIi2xl/Ofxw=; b=DKn5V6 9PPnGKd3xNboxnUyXg2MWxSlERakZRPt1lPf0nuPFoKtOElc5Fb8QGJ7fUo6OKr4 SVAAxoZfkHIy2eDR1VLXXs9QbJXpMFvMa6J5NCg231mapmfut7uFDJN9O7P1sFd0 rIIO3KkS94s+Qg/wNgAsW35muPaxoeAaCcL5c= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=from:to:subject :references:date:in-reply-to:message-id:mime-version :content-type; q=dns; s=sasl; b=qO4S052H8L8zyKk0FaxiM7aIJF5J0Wed 6GxQKotVFZJ5DozQLYh+8dfQc3SXX+Ysg/n+hpT3VLhvBPmvgqLtS0YtLqnYbHjC tIGz/z0ikHWPSCxU9wq88tLB/BLlrkfc/EwVXyOpBO3mkpbHmqXWxMRuOUdX7Xsl KS/akf4shaQ= Received: from pb-sasl1.nyi.icgroup.com (unknown [127.0.0.1]) by pb-sasl1.pobox.com (Postfix) with ESMTP id CADBB2010A for <21887-done@debbugs.gnu.org>; Mon, 27 Jun 2016 03:33:44 -0400 (EDT) Received: from clucks (unknown [88.160.190.192]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by pb-sasl1.pobox.com (Postfix) with ESMTPSA id 201D020109 for <21887-done@debbugs.gnu.org>; Mon, 27 Jun 2016 03:33:44 -0400 (EDT) From: Andy Wingo To: 21887-done@debbugs.gnu.org Subject: Re: bug#21887: 'monitor' form broken References: <87vb97s0bp.fsf@T420.taylan> <87inwyefpl.fsf@pobox.com> <87wpldgw41.fsf@T420.taylan> Date: Mon, 27 Jun 2016 09:33:36 +0200 In-Reply-To: <87wpldgw41.fsf@T420.taylan> ("Taylan Ulrich =?utf-8?Q?=5C=22Bay=C4=B1rl=C4=B1=2FKammer=5C=22=22's?= message of "Sat, 25 Jun 2016 16:51:26 +0200") Message-ID: <87shvz9jcf.fsf@pobox.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Pobox-Relay-ID: 7A5084BC-3C39-11E6-8D6A-C1836462E9F6-02397024!pb-sasl1.pobox.com X-Spam-Score: -1.0 (-) X-Debbugs-Envelope-To: 21887-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) thanks ------------=_1467012843-29033-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 12 Nov 2015 15:30:07 +0000 Received: from localhost ([127.0.0.1]:34882 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Zwtp3-0004JT-EG for submit@debbugs.gnu.org; Thu, 12 Nov 2015 10:30:04 -0500 Received: from eggs.gnu.org ([208.118.235.92]:54830) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Zwtoi-0004Ii-OC for submit@debbugs.gnu.org; Thu, 12 Nov 2015 10:29:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zwtoh-0005L4-Eu for submit@debbugs.gnu.org; Thu, 12 Nov 2015 10:29:40 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:51556) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zwtoh-0005L0-Bi for submit@debbugs.gnu.org; Thu, 12 Nov 2015 10:29:39 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36591) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zwtoc-0001rR-N7 for bug-guile@gnu.org; Thu, 12 Nov 2015 10:29:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zwtob-0005KH-MC for bug-guile@gnu.org; Thu, 12 Nov 2015 10:29:34 -0500 Received: from mail-wm0-x229.google.com ([2a00:1450:400c:c09::229]:37476) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zwtob-0005KD-Ft for bug-guile@gnu.org; Thu, 12 Nov 2015 10:29:33 -0500 Received: by wmww144 with SMTP id w144so93458803wmw.0 for ; Thu, 12 Nov 2015 07:29:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:user-agent:mime-version :content-type; bh=letWYKqsb7ZO5fAgumbiaG3iwzhL3Xxf+ImSVzKA4sw=; b=v7TvKH6t0Yx8y09ubh9Wer5GM3WO7o+WQa0lnAQAeERz4OAE0WGoiKSrFWrOICWvYG f1qlol/j1voHZb+9cb6xMo23RFYNxaOmtBWYD9HXY5fahONZWdJWRWRwVtKx27nq8hJd hQVyb0272PV13+Hhqct5wjWnufdy4a07dYTtK3N21/f1oIAu3aZrA4Wm78SR5doN1RjA PiiROuIYrnMlPlr4Raq39o3uuIi8OhJ9rQfaweR46m1a5fUWKQFkz8fGDXqnZItRMTTg LPz6lEevV3rWy+knAcETuCiSnSRu8TA/DDm6SdC3sz88NzrEThDiBlUYig2q7OxRWlPD BCrg== X-Received: by 10.194.201.202 with SMTP id kc10mr19628294wjc.84.1447342172188; Thu, 12 Nov 2015 07:29:32 -0800 (PST) Received: from T420.taylan ([2a02:908:c32:4740:221:ccff:fe66:68f0]) by smtp.gmail.com with ESMTPSA id 71sm15562884wmt.15.2015.11.12.07.29.30 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Nov 2015 07:29:31 -0800 (PST) From: taylanbayirli@gmail.com (Taylan Ulrich =?utf-8?Q?Bay=C4=B1rl=C4=B1?= =?utf-8?Q?=2FKammer?=) To: bug-guile@gnu.org Subject: 'monitor' form broken Date: Thu, 12 Nov 2015 16:29:30 +0100 Message-ID: <87vb97s0bp.fsf@T420.taylan> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.0 (----) It seems that the 'monitor' form is currently a no-op. The form (par-for-each (lambda (x) (monitor (foo))) xs) should be functionally equivalent to (let ((mutex (make-mutex))) (par-for-each (lambda (x) (with-mutex mutex (foo))) xs)) but currently becomes (par-for-each (lambda (x) (let ((mutex (make-mutex))) (with-mutex mutex (foo)))) xs) which is ineffective. I don't know what's the best way to fix this. The simplest thing that comes to my mind is something along the lines of: (define-syntax monitor (lambda (stx) (syntax-case stx () ((_ body body* ...) (let ((uuid (generate-uuid))) #`(with-mutex (mutex-with-uuid #,uuid) body body* ...)))))) where mutex-with-uuid looks it up from a hash table at run-time and instantiates it when it doesn't exist, this operation also being synchronized across threads, like: (define mutex-table (make-hash-table)) (define mutex-table-mutex (make-mutex)) (define (mutex-with-uuid uuid) (with-mutex mutex-table-mutex (or (hash-ref mutex-table uuid) (let ((mutex (make-mutex))) (hash-set! mutex-table uuid mutex) mutex)))) If that looks OK, I can try to make a proper patch from it. I'm not sure what I'd use in place of `generate-uuid' though. Would `gensym' be good enough? Shameless advertisement: with SRFI-126, the (or (hash-ref ...) ...) bit would have been just: (hashtable-intern! mutex-table uuid make-mutex) It's borrowed from MIT/GNU Scheme. Seems pretty useful. Taylan ------------=_1467012843-29033-1--