Subject: bug#27706: closed (Re: bug#27706: MacOS: decode-time hang)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 07 Oct 2017 15:34:01 +0000

Your bug report

#27706: MacOS: decode-time hang

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
27706: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=27706
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#27706: MacOS: decode-time hang
From: [email-masked] (Charles A. Roelli)
To: [email-masked] (Charles A. Roelli)
Cc: [email-masked], [email-masked], [email-masked]
Date: Sat, 07 Oct 2017 17:33:24 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

> Date: Sun, 01 Oct 2017 19:11:01 +0200
> From: [email-masked] (Charles A. Roelli)
> CC: [email-masked], [email-masked]
> 
> I pushed the fix to emacs-26:
> 
>   commit bd49b6f1b39cffeaf6098bc7b0182552683b1c07
> 
>   Workaround for faulty localtime() under macOS 10.6
> 
>   * lisp/org/org-clock.el (org-clock--oldest-date): Only execute
>   'decode-time' on times later than year -2**31 under macOS 10.6.
>   See Bug#27706.
> 
> I'll close this bug in the next few days.

Works, closing.

Subject: MacOS: decode-time hang
From: "Charles A. Roelli" <[email-masked]>
To: [email-masked]
Date: Sat, 15 Jul 2017 16:19:39 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Evaluating the following form on my system (macOS 10.6) results in a
hang from Emacs 23 to master:

(decode-time '(-1034058203136 0))

[other values around -1034058203136 don't cause an issue]

The stack trace (stuck in macOS' libc, I think):

(gdb) bt full
#0  0x00007fff83860aef in timesub () from /usr/lib/libSystem.B.dylib
No symbol table info available.
#1  0x00007fff8386081c in _st_localsub () from /usr/lib/libSystem.B.dylib
No symbol table info available.
#2  0x00007fff83869d71 in localtime_r () from /usr/lib/libSystem.B.dylib
No symbol table info available.
#3  0x00000001004586c7 in localtime_rz (tz=0x10210bba0, 
t=0x7fff5fbf8d20, tm=0x7fff5fbf8ce8) at time_rz.c:296
         abbr_saved = false
         old_tz = 0x1
#4  0x00000001002ba08b in emacs_localtime_rz (tz=0x10210bba0, 
t=0x7fff5fbf8d20, tm=0x7fff5fbf8ce8) at editfns.c:103
No locals.
#5  0x00000001002c2680 in Fdecode_time (specified_time=..., zone=...) at 
editfns.c:2163
         time_spec = -67768038400720896
         gmt_tm = {
           tm_sec = 1606388960,
           tm_min = 32767,
           tm_hour = 1766166,
           tm_mday = 1,
           tm_mon = 0,
           tm_year = 0,
           tm_wday = 0,
           tm_yday = 0,
           tm_isdst = 0,
           tm_gmtoff = 10261984,
           tm_zone = 0x7fff5fbf8d30 "`\215\277_\377\177"
         }
         tz = 0x10210bba0
         local_tm = {
           tm_sec = 24,
           tm_min = 38,
           tm_hour = 8,
           tm_mday = 32767,
           tm_mon = 0,
           tm_year = 0,
           tm_wday = 0,
           tm_yday = 0,
           tm_isdst = 0,
           tm_gmtoff = 0,
           tm_zone = 0x0
         }
         tm = 0x0
         tm_year_base = 0

The form is called when compiling the new org-timer.el, which requires
org-clock.el, which itself contains this call that causes the issue:

(defconst org-clock--oldest-date
   (let* ((dichotomy
	  (lambda (min max pred)
	    (if (funcall pred min) min
	      (cl-incf min)
	      (while (> (- max min) 1)
		(let ((mean (+ (ash min -1) (ash max -1) (logand min max 1))))
		  (if (funcall pred mean) (setq max mean) (setq min mean)))))
	    max))
	 (high
	  (funcall dichotomy
		   most-negative-fixnum
		   0
		   (lambda (m) (ignore-errors (decode-time (list m 0))))))
	 (low
	  (funcall dichotomy
		   most-negative-fixnum
		   0
		   (lambda (m) (ignore-errors (decode-time (list high m)))))))
     (list high low))
   "Internal time for oldest date representable on the system.")

As a result, "make" hangs for me, so I delete org-timer.el locally to
get around the problem for now.  But I'd like to find a more permanent
solution to make sure this doesn't happen elsewhere.

Can anyone reproduce this under macOS, and if so, under which macOS
version?  I'd like to know which versions might need a fix for this
problem.