Windows/mac help wanted

rubyists-

i'd really like to see an interface to posix locking available in ruby for all
(most) platforms ruby runs on.

i have an extension for this that should compile fine on any *nix system
(testers wanted) avialable at

   http://raa.ruby-lang.org/project/posixlock/

if anyone would like to volunteer to help compile/port this extenstion to
windows/mac - i would __greatly__ appreciate it. it is a very simple
extension containing only two methods, so it shouldn't be painful. i would be
happy to do this myself but do not have access to either windows or mac nodes.

kind regards.

-a

···

--

EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
PHONE :: 303.497.6469
A flower falls, even though we love it;
and a weed grows, even though we do not love it. --Dogen

===============================================================================

Compiles fine on my mac:

vivi ~/src/posixlock-0.0.1 % ruby extconf.rb
creating Makefile
vivi ~/src/posixlock-0.0.1 % make
gcc -fno-common -g -Os -pipe -no-cpp-precomp -fno-common -DHAVE_INTTYPES_H -pipe -pipe -I. -I/usr/lib/ruby/1.6/powerpc-darwin7.0 -I. -c -o posixlock.o posixlock.c
cc -fno-common -g -Os -pipe -no-cpp-precomp -fno-common -DHAVE_INTTYPES_H -pipe -pipe -dynamic -bundle -undefined suppress -flat_namespace -L/usr/lib/ruby/1.6/powerpc-darwin7.0 -L/usr/lib -o posixlock.bundle posixlock.o -ldl -lobjc
vivi ~/src/posixlock-0.0.1 % sudo make install
posixlock.bundle -> /usr/lib/ruby/1.6/powerpc-darwin7.0/posixlock.bundle
chmod 0755 /usr/lib/ruby/1.6/powerpc-darwin7.0/posixlock.bundle
vivi ~/src/posixlock-0.0.1 %

How should I test it?

···

--
Rando Christensen
<eyez@illuzionz.org>

Compiles fine on my mac:

thanks!

vivi ~/src/posixlock-0.0.1 % ruby extconf.rb
creating Makefile
vivi ~/src/posixlock-0.0.1 % make
gcc -fno-common -g -Os -pipe -no-cpp-precomp -fno-common
-DHAVE_INTTYPES_H -pipe -pipe -I.
-I/usr/lib/ruby/1.6/powerpc-darwin7.0 -I. -c -o posixlock.o posixlock.c
cc -fno-common -g -Os -pipe -no-cpp-precomp -fno-common
-DHAVE_INTTYPES_H -pipe -pipe -dynamic -bundle -undefined suppress
-flat_namespace -L/usr/lib/ruby/1.6/powerpc-darwin7.0 -L/usr/lib -o
posixlock.bundle posixlock.o -ldl -lobjc
vivi ~/src/posixlock-0.0.1 % sudo make install
posixlock.bundle -> /usr/lib/ruby/1.6/powerpc-darwin7.0/posixlock.bundle
chmod 0755 /usr/lib/ruby/1.6/powerpc-darwin7.0/posixlock.bundle
vivi ~/src/posixlock-0.0.1 %

How should I test it?

   require 'posixlock'
   def lock_test
     pid = Process.pid
     42.times do
       open(__FILE__,'r+'){|f| f.posixlock(File::LOCK_EX) and puts "locked by <#{ pid }>"}
     end
   end
   fork ? lock_test && Process.wait : lock_test

it is nice to run this on an nfs mounted file system - but not required...

-a

···

On Wed, 18 Aug 2004, Rando Christensen wrote:
--

EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
PHONE :: 303.497.6469
A flower falls, even though we love it;
and a weed grows, even though we do not love it. --Dogen

===============================================================================

Ara.T.Howard wrote:

  require 'posixlock'
  def lock_test
    pid = Process.pid
    42.times do
      open(__FILE__,'r+'){|f| f.posixlock(File::LOCK_EX) and puts "locked by <#{ pid }>"}
    end
  end
  fork ? lock_test && Process.wait : lock_test

I don't have nfs to test on currently, but I assume this means it worked? :

vivi ~/src/posixlock-0.0.1 % ruby test.rb
locked by <1276>
locked by <1277>
locked by <1276>
locked by <1277>
locked by <1276>
locked by <1277>

···

--
Rando Christensen
<eyez@illuzionz.org>

yup.

thanks a bunch. mac __are__ nice i guess! now all i have to do is deal with
the windows thing...

regards.

-a

···

On Wed, 18 Aug 2004, Rando Christensen wrote:

Ara.T.Howard wrote:

  require 'posixlock'
  def lock_test
    pid = Process.pid
    42.times do
      open(__FILE__,'r+'){|f| f.posixlock(File::LOCK_EX) and puts
"locked by <#{ pid }>"}
    end
  end
  fork ? lock_test && Process.wait : lock_test

I don't have nfs to test on currently, but I assume this means it worked? :

vivi ~/src/posixlock-0.0.1 % ruby test.rb
locked by <1276>

--

EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
PHONE :: 303.497.6469
A flower falls, even though we love it;
and a weed grows, even though we do not love it. --Dogen

===============================================================================

Windows seems to exclusive lock when a file is opened for writing by default. I have been unable to find a way around it. There cannot be a reader, and then another process open the file for writing.

I may have missed something, but maybe you need to only hold open a file for writing.

If this is not the case, or there is a way around it, I am interested to know.

Dan

···

On Aug 17, 2004, at 22:50, Ara.T.Howard wrote:

On Wed, 18 Aug 2004, Rando Christensen wrote:

Ara.T.Howard wrote:

  require 'posixlock'
  def lock_test
    pid = Process.pid
    42.times do
      open(__FILE__,'r+'){|f| f.posixlock(File::LOCK_EX) and puts
"locked by <#{ pid }>"}
    end
  end
  fork ? lock_test && Process.wait : lock_test

I don't have nfs to test on currently, but I assume this means it worked? :

vivi ~/src/posixlock-0.0.1 % ruby test.rb
locked by <1276>

yup.

thanks a bunch. mac __are__ nice i guess! now all i have to do is deal with
the windows thing...

regards.

-a
--

> EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
> PHONE :: 303.497.6469
> A flower falls, even though we love it;
> and a weed grows, even though we do not love it. | --Dogen

Ara.T.Howard wrote:

yup.

thanks a bunch. mac __are__ nice i guess!

As I understand it, most of the problems (I'd estimate somewhere around 80%, but I have nothing to back that number up) involved in porting unix software to osx (not taking the gui into account at all, of course) are the differences in how libraries work and small tweaks to the compiler to account for it, and a surprising number of things really do work exactly how they'd work in a freebsd system.

Which is very nice indeed. :slight_smile:

···

--
Rando Christensen
<eyez@illuzionz.org>

Windows seems to exclusive lock when a file is opened for writing by
default. I have been unable to find a way around it. There cannot be a
reader, and then another process open the file for writing.

I may have missed something, but maybe you need to only hold open a
file for writing.

If this is not the case, or there is a way around it, I am interested
to know.

i know nothing of windows but, in my case, i'm using posixlock to lock an
empty nfs mounted semaphore file. i'm guessin the windows nfs client is that
quite smart enough to know that some process on another machine is holding a
lock...

also LockFile exists for windows according to some of the source i've looked
at...

but, like i said, i know _nothing_ of windows. please enlighten if you have
further comments!

cheers.

-a

Dan

Ara.T.Howard wrote:

  require 'posixlock'
  def lock_test
    pid = Process.pid
    42.times do
      open(__FILE__,'r+'){|f| f.posixlock(File::LOCK_EX) and puts
"locked by <#{ pid }>"}
    end
  end
  fork ? lock_test && Process.wait : lock_test

I don't have nfs to test on currently, but I assume this means it
worked? :

vivi ~/src/posixlock-0.0.1 % ruby test.rb
locked by <1276>

yup.

thanks a bunch. mac __are__ nice i guess! now all i have to do is
deal with
the windows thing...

regards.

-a
--

========
> EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
> PHONE :: 303.497.6469
> A flower falls, even though we love it;
> and a weed grows, even though we do not love it. | --Dogen

========

-a

···

On Wed, 18 Aug 2004, Dan Janowski wrote:

On Aug 17, 2004, at 22:50, Ara.T.Howard wrote:

On Wed, 18 Aug 2004, Rando Christensen wrote:

--

EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
PHONE :: 303.497.6469
A flower falls, even though we love it;
and a weed grows, even though we do not love it. --Dogen

===============================================================================