On Wed, Aug 18, 2004 at 09:23:55PM +0900, William Morgan wrote:
> Hi Rubyists,
> 
> I'm working on a predictive battery monitor in Ruby. One issue I've
> found is that when I read /proc/acpi/battery/BAT1/state and there are
> other Ruby threads running, the read seems to freeze.  This doesn't
> happen with other files in /proc/acpi (that I've tried, at least) and
> doesn't happen if there's no threading going on.
> 
> Here's some code that hangs on the read for me:
> 
> PROC_FILE = "/proc/acpi/battery/BAT1/state"         # freezes
> #PROC_FILE = "/proc/acpi/power_resource/PFAN/state" # doesn't freeze

I have the same beavior with these files:
PROC_FILE = "/proc/acpi/battery/BAT0/state"         # freezes
PROC_FILE = "/proc/acpi/power_resource/PRCF/state" # doesn't freeze

I can't explain it :-)


> FREEZE = true # when this is true, the "read" thread freezes for me
> 
> def read
>   puts "=== starting to read at #{Time.now}"
>   IO.foreach(PROC_FILE) { |l| puts "> #{l}" }
>   puts "===     done reading at #{Time.now}"
> end
> 
> Thread.new do
>   while true
>     puts "zzz..."
>     sleep 1
>   end
> end if FREEZE
> 
> while true
>   read
>   sleep 1
> end
> 
> This might be some weird kernel interaction thing that's specific to my
> buggy BIOS, but I thought I'd check and see if others experienced the
> same behavior.
> 
> Thanks,
> 
> -- 
> William <wmorgan-ruby-talk / masanjin.net>
> 
>