about summary refs log tree commit homepage
path: root/lib/raindrops/linux.rb
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2012-06-05 17:49:43 -0700
committerEric Wong <normalperson@yhbt.net>2012-06-05 17:49:43 -0700
commitbd7236fe23c4388d2fa42a4f836aca3c796dabab (patch)
tree68c40ff04e15853d12138d06a34dbb73a3e1389b /lib/raindrops/linux.rb
parent15dea14dd4e1af97aef928430c3c8ef8c5d74451 (diff)
downloadraindrops-bd7236fe23c4388d2fa42a4f836aca3c796dabab.tar.gz
Teach unix_listener_stats to remember the symlink path
it followed and have it point to the same object as the
resolved (real) socket path.

This allows the case where looking up stats by symlinks
works if the symlink is given to unix_listener_stats:

  File.symlink("/real/path/of.sock", "/path/to/link.sock")
  stats = unix_listener_stats(["/path/to/link.sock"])
  stats["/path/to/link.sock"] => # same as stats["/real/path/of.sock"]
Diffstat (limited to 'lib/raindrops/linux.rb')
-rw-r--r--lib/raindrops/linux.rb9
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/raindrops/linux.rb b/lib/raindrops/linux.rb
index a198253..1752b8a 100644
--- a/lib/raindrops/linux.rb
+++ b/lib/raindrops/linux.rb
@@ -43,9 +43,14 @@ module Raindrops::Linux
     else
       paths = paths.map do |path|
         path = path.dup
-        path = Pathname.new(path).realpath.to_s
         path.force_encoding(Encoding::BINARY) if defined?(Encoding)
-        rv[path]
+        if File.symlink?(path)
+          link = path
+          path = Pathname.new(link).realpath.to_s
+          rv[link] = rv[path] # vivify ListenerStats
+        else
+          rv[path] # vivify ListenerStats
+        end
         Regexp.escape(path)
       end
     end