emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debbugs-tracker] bug#29704: closed (Guile 2.2.2: SRFI-18, condition var


From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#29704: closed (Guile 2.2.2: SRFI-18, condition variables, timeouts)
Date: Fri, 16 Feb 2018 14:32:02 +0000

Your message dated Fri, 16 Feb 2018 15:31:02 +0100
with message-id <address@hidden>
and subject line Re: bug#29704: Guile 2.2.2: SRFI-18, condition variables, 
timeouts
has caused the debbugs.gnu.org bug report #29704,
regarding Guile 2.2.2: SRFI-18, condition variables, timeouts
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden)


-- 
29704: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=29704
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: Guile 2.2.2: SRFI-18, condition variables, timeouts Date: Thu, 14 Dec 2017 12:37:41 +1100 User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 Hello, I'm using Guile 2.2.2 built from source as downloaded from the project
website.

$ guile -v
guile (GNU Guile) 2.2.2


I would expect the following command to return in 5 seconds:
$ guile -c '(use-modules (srfi srfi-18)) (let ((cv (make-condition-variable)) (m (make-mutex))) (mutex-lock! m) (mutex-unlock! m cv 5))'

However, it returns instantly for me. This command works as expected:
$ guile -c "(use-modules ((srfi srfi-18) #:prefix srfi:)) (let ((cv (srfi:make-condition-variable)) (m (srfi:make-mutex))) (srfi:mutex-lock! m) (srfi:mutex-unlock! m cv (+ (current-time) 5)))"


It's stated on the page https://srfi.schemers.org/srfi-18/srfi-18.html that:

"All synchronization primitives which take a timeout parameter accept three
types of values as a timeout, with the following meaning:

* a time object represents an absolute point in time

* an exact or inexact real number represents a relative time in seconds from the
  moment the primitive was called

* #f means that there is no timeout"

Assuming this page is accurate, then the case in the test code
falls under the second dot point from the spec.

The source in module/srfi/srfi-18.scm seems to pass the timeout parameter
unaltered to Guile's wait-condition-variable function, and that parameter is
said in the docs to be "either a integer as returned by ‘current-time’ or a pair
as returned by ‘gettimeofday’". I think that would cause the unexpected
behaviour that I see.

I have some time at the moment where I could address this, please let me know if
you would like me to work on a fix.

Regards,
David



--- End Message ---
--- Begin Message --- Subject: Re: bug#29704: Guile 2.2.2: SRFI-18, condition variables, timeouts Date: Fri, 16 Feb 2018 15:31:02 +0100 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux)
Hi David,

David Beswick <address@hidden> skribis:

> I would expect the following command to return in 5 seconds:
> $ guile -c '(use-modules (srfi srfi-18)) (let ((cv
> (make-condition-variable)) (m (make-mutex))) (mutex-lock! m)
> (mutex-unlock! m cv 5))'
>
> However, it returns instantly for me. This command works as expected:
> $ guile -c "(use-modules ((srfi srfi-18) #:prefix srfi:)) (let ((cv
> (srfi:make-condition-variable)) (m (srfi:make-mutex)))
> (srfi:mutex-lock! m) (srfi:mutex-unlock! m cv (+ (current-time) 5)))"
>
>
> It's stated on the page https://srfi.schemers.org/srfi-18/srfi-18.html that:
>
> "All synchronization primitives which take a timeout parameter accept three
> types of values as a timeout, with the following meaning:
>
> * a time object represents an absolute point in time
>
> * an exact or inexact real number represents a relative time in
> seconds from the
>   moment the primitive was called
>
> * #f means that there is no timeout"
>
> Assuming this page is accurate, then the case in the test code
> falls under the second dot point from the spec.

Sorry the late reply.  I believe this and a similar issue with
‘thread-sleep!’ is now fixed:

  
https://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.2&id=2c7b350f93564daee16a311c001a85577d4b69e1
  
https://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.2&id=39860539599f74958c0cc9008fc6fa271349b58b

Let me know if anything’s wrong!

Thank you,
Ludo’.


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]