lib/spring/sid.rb in spring-0.0.6 vs lib/spring/sid.rb in spring-0.0.7
- old
+ new
@@ -1,16 +1,39 @@
-require 'fiddle'
+begin
+ # If rubygems is present, keep it out of the way when loading fiddle,
+ # otherwise if fiddle is not installed then rubygems will load all
+ # gemspecs in its (futile) search for fiddle, which is slow.
+ if respond_to?(:gem_original_require, true)
+ gem_original_require 'fiddle'
+ else
+ require 'fiddle'
+ end
+rescue LoadError
+end
module Spring
module SID
- FUNC = Fiddle::Function.new(
- DL::Handle::DEFAULT['getsid'],
- [Fiddle::TYPE_INT],
- Fiddle::TYPE_INT
- )
+ def self.fiddle_func
+ @fiddle_func ||= Fiddle::Function.new(
+ DL::Handle::DEFAULT['getsid'],
+ [Fiddle::TYPE_INT],
+ Fiddle::TYPE_INT
+ )
+ end
- def self.sid(pid = 0)
- FUNC.call(pid)
+ def self.sid
+ @sid ||= begin
+ if Process.respond_to?(:getsid)
+ # Ruby 2
+ Process.getsid
+ elsif defined?(Fiddle)
+ # Ruby 1.9.3 compiled with libffi support
+ fiddle_func.call(0)
+ else
+ # last resort: shell out
+ `ps -p #{Process.pid} -o sess=`.to_i
+ end
+ end
end
def self.pgid
Process.getpgid(sid)
end