diff --git a/lib/modules/Concurrent.pmod b/lib/modules/Concurrent.pmod index 1a4b65a7ea62bb7aed8447965f63a1086e8e82d6..a50e8c0416e33386f4daab12ff955bca13f1969f 100644 --- a/lib/modules/Concurrent.pmod +++ b/lib/modules/Concurrent.pmod @@ -884,9 +884,6 @@ class Promise final int _materialised; final AggregateState _astate; -#if CONCURRENT_DEBUG - array(Pike.BacktraceFrame) createdat; -#endif //! Creates a new promise, optionally initialised from a traditional callback //! driven method via @expr{executor(success, failure, @@extra)@}. @@ -897,9 +894,6 @@ class Promise function(function(mixed:void), function(mixed:void), mixed ...:void) executor, mixed ... extra) { -#if CONCURRENT_DEBUG - createdat = backtrace()[..<1]; -#endif state = STATE_NO_FUTURE; if (executor) executor(success, failure, @extra); @@ -1201,15 +1195,21 @@ class Promise return max_failures(-1); } + private string orig_backtrace = +#ifdef CONCURRENT_DEBUG + sprintf("%s\n------\n", describe_backtrace(backtrace())) +#else + "" +#endif + ; + protected void destroy() { // NB: Don't complain about dropping STATE_NO_FUTURE on the floor. if (state == STATE_PENDING) - try_failure(({ sprintf("%O: Promise broken.\n", this), -#if CONCURRENT_DEBUG - this->createdat || -#endif - backtrace() })); + try_failure(({ sprintf("%O: Promise broken.\n%s", + this, orig_backtrace), + backtrace() })); if ((state == STATE_REJECTED) && global_on_failure) call_callback(global_on_failure, result); result = UNDEFINED;