[#3861] super — ts <decoux@...>
[#3862] Marshal.dump'ing OpenStruct objects — Mauricio Fern疣dez <batsman.geo@...>
Hi,
[#3881] mkdir, mkdir_p in FileUtils and mode — Florian Frank <flori@...>
Hello,
[#3907] Obtaining mode information on an IO object — Jos Backus <jos@...>
The attached patch implements IO#mode. This method returns the mode the IO
Hi,
On Tue, Dec 07, 2004 at 09:25:13AM +0900, nobu.nokada@softhome.net wrote:
Jos Backus wrote:
Hi,
On Thu, Dec 09, 2004 at 10:47:48AM +0900, nobu.nokada@softhome.net wrote:
On Thu, Dec 09, 2004 at 02:40:33PM +0900, James Britt wrote:
[#3914] Pathname needs a makeover — "Berger, Daniel" <Daniel.Berger@...>
Hi all,
[#3922] Incorrect escaping in strings produced by String::inspect — noreply@...
Bugs item #1173, was opened at 2004-12-08 17:35
[#3966] unknown node type 0 — Andrew Walrond <andrew@...>
I still get this happening a lot with my Rubyx linux ruby script.
This is a long standing bug in Ruby, and has been reported hundreds of times
Hi,
[#3975] Patches to test/unit — Ryan Davis <ryand-ruby@...>
I believe these are the minimal patches needed to make it possible to
[#3982] Win32: rb_sys_fail() - errno == 0 — Florian Gro<florgro@...>
Moin!
[#4000] 1.8.2 preview4 — Yukihiro Matsumoto <matz@...>
Hello,
[#4009] cgi.rb -- more GET/POST stuff — mde@...26.com
First of all, I think it would be great, as Eustaquio suggests, to
GETs and POSTs are defined to be fairly different actions. I'd read
-----BEGIN PGP SIGNED MESSAGE-----
Francis Hwang wrote:
-----BEGIN PGP SIGNED MESSAGE-----
First of all, the entire discussion of when GET is appropriate
mde@state26.com wrote:
[#4027] Allowing custom number literal suffixes? — Florian Gro<florgro@...>
Moin!
Hi,
Mathieu Bouchard wrote:
Mathieu Bouchard wrote:
I'm not sure I would advocate making Ruby's grammar even more
>
Brent Roman wrote:
> Brent Roman wrote:
Brent Roman wrote:
> Florian Gross wrote:
Mathieu Bouchard wrote:
Mathieu Bouchard wrote:
[#4033] Garbage collection trouble — Christian Neukirchen <chneukirchen@...>
Hello,
>>>>> "C" == Christian Neukirchen <chneukirchen@gmail.com> writes:
ts <decoux@moulon.inra.fr> writes:
>>>>> "C" == Christian Neukirchen <chneukirchen@gmail.com> writes:
[#4040] Extensions, Internal — Jgen Mangler <juergen.mangler@...>
Hi,
Thread rendezvous with timeouts
We needed an event scheduler to manage our multi-threaded motion control
application -- a robotic bio-tech lab instrument. The core of the
scheduler thread keeps a list of events sorted by future time and
processes them after the appropriate delays. This leads naturally to
something like:
def awaitNextEvent
loop {
lock #the scheduler event queue
if (nxtEv=nextEvent) #pops nextEvent from the event queue
break if (@wakeTime=nxtEv.timestamp)<=(present=Time.now)
lock exclusive_unlock {sleep @wakeTime-present}
else #there is no next event, the queue was empty
@wakeTime=MaxTime
lock exclusive_unlock {sleep}
end
end
}
end
All the locking and unlocking ensures that the queue cannot be modified
by other threads until the scheduler is waiting for the next event.
But, as the scheduler waits, other threads can insert events earlier
than the one for which the scheduler is waiting.
The astute reader may already spot at least one problem with the above
pseudo-code. We need to unlock access to the scheduler queue before
sleeping, but because sleep, unlike Thread.stop, does not affect
Thread.critical, Thread.critical remains true and no other thread can
run (except, of course, if a trap occurs :-)
If one were to insert an explicit
Thread.critical=false
before each of the two sleeps in the above code, one would introduce a
race condition because an event could then be inserted into the queue
before the event scheduler is asleep awaiting the next.
My current fix for this is a 'C' extension called "doze".
doze is just a version of sleep that clears
Thread.critical before sleeping.
This works, but it feels like a hack and it does not really address the
broader issue, which is, should it be possible for a thread to sleep
with Thread.critical set?
Sleeping with Thread.critical set is certainly bad practice, but I have
used it for debugging purposes to freeze the system state so I could
inspect it. rb_thread_wait_for() in eval.c handles the case of having
Thread.critical set, so whoever coded that must have thought it was an
important case.
My "doze" hack does not handle the case where the sleeping thread also
wants to be awoken on an I/O event. I suppose I could add an analogous
"selectDoze" hack as well, but, again, this feels wrong. Why should the
commonly desirable case require loading a special extension?
I think it might make more sense to remove the rb_thread_critical check
from the beginning of rb_thread_wait_for(time) in eval.c. Combined with
the patch I submitted in ruby-core:4039, this would cause
Thread.critical to be cleared on any attempt to sleep what would cause
a different thread to be awoken.
I'd advocate adding a special function to sleep with Thread.critical set
to be used for debugging purposes only. Or maybe this could be
implemented as an extra defaulted parameter to sleep and select.
Any thoughts?
--
Brent Roman MBARI
mailto:brent@mbari.org http://www.mbari.org/~brent