Hi,

after some testing it seems 2.9p4 is broken, on my lab net (DS9097u) no devices appear at all when doing owdir. On my primary net (LinkUSB), the search revealed some devices, but not all.. Reading did not seem possible (something about device not on bus, but did not look closer since I did not want my primary net down).

After some digging, I narrowed it down to the changes in ow_select.c in commit eab3f99828ffecf81318363c82f81fc36c1b5ca1. There are no DS2409 involved in any of the nets, so it seems these fixes somehow have unwanted sideeffects. Unfortunately, the code is somewhat to complex without deep understanding of how owfs works, so I cannot dig much further. However, debug-logs provided below, and I can assist with testing patches if necessary.

Btw, while digging around the code, I noticed there are no git tags yet. I recommend a tag to be made for every release. Simplifies when looking for what changed.. :) Should be as easy as "git tag v2.9p3 <gitrev-of-2.9p3-release> && git push --tags".

Best regards
Johan

Debug output, with the patch above (ow_select.c + ow_parsedname.h only) reverted, from freshly started owserver and excuting "owdir /":

  DEBUG: ow_tcp_read.c:(64) attempt 24 bytes Time: 10.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 24 - 0 = 24
DEBUG: from_client.c:(66) FromClient payload=2 size=0 type=7 sg=0x10A offset=0 DEBUG: from_client.c:(74) FromClient (no servermessage) payload=2 size=0 type=7 controlflags=0x10A offset=0
  DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 10.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
  DEBUG: handler.c:(153) START handler /
   CALL: data.c:(104) DataHandler: parse path=/
  DEBUG: ow_parseobject.c:(164) /
   CALL: ow_parsename.c:(102) path=[/]
   CALL: data.c:(164) Directory message (all at once)
  DEBUG: dirall.c:(66) OWSERVER Dir-All SpecifiedBus=0 path = /
  DEBUG: ow_dir.c:(78) path=/
   CALL: ow_dir.c:(102) path=/
  DEBUG: ow_cache.c:(854) Looking for directory 00 00 00 00 00 00 00 00
DEBUG: ow_cache.c:(867) Get from cache sn 00 00 00 00 00 00 00 00 pointer=0x800b0e5cc extension=0
  DEBUG: ow_cache.c:(896) Dir not found in cache
DEBUG: ow_search.c:(32) Start of directory path=/ device=00 00 00 00 00 00 00 00 DEBUG: ow_select.c:(66) Selecting a path (and device) path=/ SN=00 00 00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
  DEBUG: ow_select.c:(79) Continuing root branch
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 16 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 16 - 0 = 16
  DEBUG: ow_ds9097U.c:(730) SN found: 10 50 1C EE 00 08 00 A2
  DEBUG: ow_search.c:(74) Device found: 10 50 1C EE 00 08 00 A2
DEBUG: ow_cache.c:(547) Adding device location 10 50 1C EE 00 08 00 A2 bus=0 DEBUG: ow_cache.c:(636) Add to cache sn 10 50 1C EE 00 08 00 A2 pointer=0x800b0e5c4 index=0 size=4 DEBUG: ow_cache.c:(547) Adding device location 10 50 1C EE 00 08 00 A2 bus=0 DEBUG: ow_cache.c:(636) Add to cache sn 10 50 1C EE 00 08 00 A2 pointer=0x800b0e5c4 index=0 size=4
   CALL: ow_parsename.c:(102) path=[/10.501CEE000800]
  DEBUG: ow_cache.c:(913) Looking for device 10 50 1C EE 00 08 00 A2
DEBUG: ow_cache.c:(1069) Search in cache sn 10 50 1C EE 00 08 00 A2 pointer=0x800b0e5c4 index=0 size=4 DEBUG: ow_cache.c:(1085) Value found in cache. Remaining life: 120 seconds.
  DEBUG: ow_presence.c:(76) Found device on bus 0
  DEBUG: ow_parsename.c:(61) /10.501CEE000800
DEBUG: ow_select.c:(66) Selecting a path (and device) path=/ SN=00 00 00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
  DEBUG: ow_select.c:(79) Continuing root branch
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 16 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 16 - 0 = 16
  DEBUG: ow_ds9097U.c:(730) SN found: 28 17 A3 DB 00 00 00 28
  DEBUG: ow_search.c:(74) Device found: 28 17 A3 DB 00 00 00 28
DEBUG: ow_cache.c:(547) Adding device location 28 17 A3 DB 00 00 00 28 bus=0 DEBUG: ow_cache.c:(636) Add to cache sn 28 17 A3 DB 00 00 00 28 pointer=0x800b0e5c4 index=0 size=4 DEBUG: ow_cache.c:(547) Adding device location 28 17 A3 DB 00 00 00 28 bus=0 DEBUG: ow_cache.c:(636) Add to cache sn 28 17 A3 DB 00 00 00 28 pointer=0x800b0e5c4 index=0 size=4
   CALL: ow_parsename.c:(102) path=[/28.17A3DB000000]
  DEBUG: ow_cache.c:(913) Looking for device 28 17 A3 DB 00 00 00 28
DEBUG: ow_cache.c:(1069) Search in cache sn 28 17 A3 DB 00 00 00 28 pointer=0x800b0e5c4 index=0 size=4 DEBUG: ow_cache.c:(1085) Value found in cache. Remaining life: 120 seconds.
  DEBUG: ow_presence.c:(76) Found device on bus 0
  DEBUG: ow_parsename.c:(61) /28.17A3DB000000
DEBUG: ow_select.c:(66) Selecting a path (and device) path=/ SN=00 00 00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
  DEBUG: ow_select.c:(79) Continuing root branch
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 16 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 16 - 0 = 16
  DEBUG: ow_ds9097U.c:(730) SN found: 12 2F A7 7F 00 00 00 43
  DEBUG: ow_search.c:(74) Device found: 12 2F A7 7F 00 00 00 43
DEBUG: ow_cache.c:(547) Adding device location 12 2F A7 7F 00 00 00 43 bus=0 DEBUG: ow_cache.c:(636) Add to cache sn 12 2F A7 7F 00 00 00 43 pointer=0x800b0e5c4 index=0 size=4 DEBUG: ow_cache.c:(547) Adding device location 12 2F A7 7F 00 00 00 43 bus=0 DEBUG: ow_cache.c:(636) Add to cache sn 12 2F A7 7F 00 00 00 43 pointer=0x800b0e5c4 index=0 size=4
   CALL: ow_parsename.c:(102) path=[/12.2FA77F000000]
  DEBUG: ow_cache.c:(913) Looking for device 12 2F A7 7F 00 00 00 43
DEBUG: ow_cache.c:(1069) Search in cache sn 12 2F A7 7F 00 00 00 43 pointer=0x800b0e5c4 index=0 size=4 DEBUG: ow_cache.c:(1085) Value found in cache. Remaining life: 120 seconds.
  DEBUG: ow_presence.c:(76) Found device on bus 0
  DEBUG: ow_parsename.c:(61) /12.2FA77F000000
DEBUG: ow_select.c:(66) Selecting a path (and device) path=/ SN=00 00 00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
  DEBUG: ow_select.c:(79) Continuing root branch
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 16 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 16 - 0 = 16
  DEBUG: ow_ds9097U.c:(730) SN found: 01 CF 80 B1 0B 00 00 92
  DEBUG: ow_search.c:(74) Device found: 01 CF 80 B1 0B 00 00 92
DEBUG: ow_cache.c:(547) Adding device location 01 CF 80 B1 0B 00 00 92 bus=0 DEBUG: ow_cache.c:(636) Add to cache sn 01 CF 80 B1 0B 00 00 92 pointer=0x800b0e5c4 index=0 size=4 DEBUG: ow_cache.c:(547) Adding device location 01 CF 80 B1 0B 00 00 92 bus=0 DEBUG: ow_cache.c:(636) Add to cache sn 01 CF 80 B1 0B 00 00 92 pointer=0x800b0e5c4 index=0 size=4
   CALL: ow_parsename.c:(102) path=[/01.CF80B10B0000]
  DEBUG: ow_cache.c:(913) Looking for device 01 CF 80 B1 0B 00 00 92
DEBUG: ow_cache.c:(1069) Search in cache sn 01 CF 80 B1 0B 00 00 92 pointer=0x800b0e5c4 index=0 size=4 DEBUG: ow_cache.c:(1085) Value found in cache. Remaining life: 120 seconds.
  DEBUG: ow_presence.c:(76) Found device on bus 0
  DEBUG: ow_parsename.c:(61) /01.CF80B10B0000
DEBUG: ow_cache.c:(479) Adding directory for 00 00 00 00 00 00 00 00 elements=4 DEBUG: ow_cache.c:(636) Add to cache sn 00 00 00 00 00 00 00 00 pointer=0x800b0e5cc index=0 size=32
....


With the patch applied (i.e. current HEAD), non-working debug output:

  DEBUG: ow_tcp_read.c:(64) attempt 24 bytes Time: 10.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 24 - 0 = 24
DEBUG: from_client.c:(66) FromClient payload=2 size=0 type=7 sg=0x10A offset=0 DEBUG: from_client.c:(74) FromClient (no servermessage) payload=2 size=0 type=7 controlflags=0x10A offset=0
  DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 10.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
  DEBUG: handler.c:(153) START handler /
   CALL: data.c:(104) DataHandler: parse path=/
  DEBUG: ow_parseobject.c:(164) /
   CALL: ow_parsename.c:(102) path=[/]
   CALL: data.c:(164) Directory message (all at once)
  DEBUG: dirall.c:(66) OWSERVER Dir-All SpecifiedBus=0 path = /
  DEBUG: ow_dir.c:(78) path=/
   CALL: ow_dir.c:(102) path=/
  DEBUG: ow_cache.c:(854) Looking for directory 00 00 00 00 00 00 00 00
DEBUG: ow_cache.c:(867) Get from cache sn 00 00 00 00 00 00 00 00 pointer=0x800b0e5cc extension=0
  DEBUG: ow_cache.c:(896) Dir not found in cache
DEBUG: ow_search.c:(32) Start of directory path=/ device=00 00 00 00 00 00 00 00 DEBUG: ow_select.c:(71) Selecting a path (and device) path=/ SN=00 00 00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
  DEBUG: ow_select.c:(82) Clearing root branch
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
  DEBUG: ow_transaction.c:(113) send = 0
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_transaction.c:(131) readin = 0
  DEBUG: ow_transaction.c:(98) compare = 1
DEBUG: ow_select.c:(71) Selecting a path (and device) path=/ SN=00 00 00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
  DEBUG: ow_select.c:(82) Clearing root branch
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
  DEBUG: ow_transaction.c:(113) send = 0
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_transaction.c:(131) readin = 0
  DEBUG: ow_transaction.c:(98) compare = 1
DEBUG: ow_select.c:(71) Selecting a path (and device) path=/ SN=00 00 00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
  DEBUG: ow_select.c:(82) Clearing root branch
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
  DEBUG: ow_transaction.c:(113) send = 0
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_transaction.c:(131) readin = 0
  DEBUG: ow_transaction.c:(98) compare = 1
   CALL: ow_parsename.c:(102) path=[/bus.0]
  DEBUG: ow_parsename.c:(61) /bus.0
   CALL: ow_parsename.c:(102) path=[/uncached]
  DEBUG: ow_parsename.c:(61) /uncached
   CALL: ow_parsename.c:(102) path=[/settings]
  DEBUG: ow_parsename.c:(61) /settings
   CALL: ow_parsename.c:(102) path=[/system]
  DEBUG: ow_parsename.c:(61) /system
   CALL: ow_parsename.c:(102) path=[/statistics]
  DEBUG: ow_parsename.c:(61) /statistics
   CALL: ow_parsename.c:(102) path=[/structure]
  DEBUG: ow_parsename.c:(61) /structure
  DEBUG: ow_dir.c:(197) ret=-5
  DEBUG: ow_parsename.c:(61) /
  DEBUG: data.c:(194) DataHandler: FS_ParsedName_destroy done
  DEBUG: data.c:(208) DataHandler: cm.ret=-5
  DEBUG: to_client.c:(76) payload=0 size=0, ret=-5, sg=0x10A offset=0
  DEBUG: to_client.c:(85) No data
  DEBUG: data.c:(227) Finished with client request
  DEBUG: handler.c:(135) OWSERVER handler done
  DEBUG: ow_net_server.c:(238) Normal exit.
  DEBUG: ow_tcp_read.c:(64) attempt 24 bytes Time: 10.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 24 - 0 = 24
DEBUG: from_client.c:(66) FromClient payload=2 size=0 type=4 sg=0x10A offset=0 DEBUG: from_client.c:(74) FromClient (no servermessage) payload=2 size=0 type=4 controlflags=0x10A offset=0
  DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 10.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
  DEBUG: handler.c:(153) START handler /
   CALL: data.c:(104) DataHandler: parse path=/
  DEBUG: ow_parseobject.c:(164) /
   CALL: ow_parsename.c:(102) path=[/]
   CALL: data.c:(160) Directory message (one at a time)
   CALL: dir.c:(74) DirHandler: pn->path=/
  DEBUG: dir.c:(79) OWSERVER SpecifiedBus=0 path=/
  DEBUG: ow_dir.c:(78) path=/
   CALL: ow_dir.c:(102) path=/
  DEBUG: ow_cache.c:(854) Looking for directory 00 00 00 00 00 00 00 00
DEBUG: ow_cache.c:(867) Get from cache sn 00 00 00 00 00 00 00 00 pointer=0x800b0e5cc extension=0
  DEBUG: ow_cache.c:(896) Dir not found in cache
DEBUG: ow_search.c:(32) Start of directory path=/ device=00 00 00 00 00 00 00 00 DEBUG: ow_select.c:(71) Selecting a path (and device) path=/ SN=00 00 00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
  DEBUG: ow_select.c:(82) Clearing root branch
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
  DEBUG: ow_transaction.c:(113) send = 0
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_transaction.c:(131) readin = 0
  DEBUG: ow_transaction.c:(98) compare = 1
DEBUG: ow_select.c:(71) Selecting a path (and device) path=/ SN=00 00 00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
  DEBUG: ow_select.c:(82) Clearing root branch
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
  DEBUG: ow_transaction.c:(113) send = 0
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_transaction.c:(131) readin = 0
  DEBUG: ow_transaction.c:(98) compare = 1
DEBUG: ow_select.c:(71) Selecting a path (and device) path=/ SN=00 00 00 00 00 00 00 00 last path=00 00 00 00 00 00 00 00
  DEBUG: ow_select.c:(82) Clearing root branch
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_tcp_read.c:(64) attempt 2 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 2 - 0 = 2
  DEBUG: ow_transaction.c:(113) send = 0
  DEBUG: ow_tcp_read.c:(64) attempt 1 bytes Time: 5.000000 seconds
  DEBUG: ow_tcp_read.c:(114) read: 1 - 0 = 1
  DEBUG: ow_transaction.c:(131) readin = 0
  DEBUG: ow_transaction.c:(98) compare = 1
   CALL: ow_parsename.c:(102) path=[/bus.0]
  DEBUG: dir.c:(57) owserver Calling dir=/bus.0
  DEBUG: to_client.c:(76) payload=7 size=6, ret=0, sg=0x10A offset=0
  DEBUG: ow_parsename.c:(61) /bus.0
   CALL: ow_parsename.c:(102) path=[/uncached]
  DEBUG: dir.c:(57) owserver Calling dir=/uncached
  DEBUG: to_client.c:(76) payload=10 size=9, ret=0, sg=0x10A offset=0
  DEBUG: ow_parsename.c:(61) /uncached
   CALL: ow_parsename.c:(102) path=[/settings]
  DEBUG: dir.c:(57) owserver Calling dir=/settings
  DEBUG: to_client.c:(76) payload=10 size=9, ret=0, sg=0x10A offset=0
  DEBUG: ow_parsename.c:(61) /settings
   CALL: ow_parsename.c:(102) path=[/system]
  DEBUG: dir.c:(57) owserver Calling dir=/system
  DEBUG: to_client.c:(76) payload=8 size=7, ret=0, sg=0x10A offset=0
  DEBUG: ow_parsename.c:(61) /system
   CALL: ow_parsename.c:(102) path=[/statistics]
  DEBUG: dir.c:(57) owserver Calling dir=/statistics
  DEBUG: to_client.c:(76) payload=12 size=11, ret=0, sg=0x10A offset=0
  DEBUG: ow_parsename.c:(61) /statistics
   CALL: ow_parsename.c:(102) path=[/structure]
  DEBUG: dir.c:(57) owserver Calling dir=/structure
  DEBUG: to_client.c:(76) payload=11 size=10, ret=0, sg=0x10A offset=0
  DEBUG: ow_parsename.c:(61) /structure
  DEBUG: ow_dir.c:(197) ret=-5
  DEBUG: ow_parsename.c:(61) /
  DEBUG: data.c:(194) DataHandler: FS_ParsedName_destroy done
  DEBUG: data.c:(208) DataHandler: cm.ret=-5
  DEBUG: to_client.c:(76) payload=0 size=0, ret=-5, sg=0x10A offset=0
  DEBUG: to_client.c:(85) No data
  DEBUG: data.c:(227) Finished with client request
  DEBUG: handler.c:(135) OWSERVER handler done
  DEBUG: ow_net_server.c:(238) Normal exit.


On 4/30/14 11:15 , Johan Ström wrote:
Hi,

big up for git.. :)

Compiles fine on FreeBSD now, without any extra patches! Haven't tried to use it yet though. If it works OK I will probably submit the owfs port to the ports system.

/Johan

On 4/30/14 02:35 , Paul Alfille wrote:
Release Notes owfs 2.9p4
4/30/2014

New features
1. Switch to git for source management
Still hosted on sourceforge.net <http://sourceforge.net>
git clone git://git.code.sf.net/p/owfs/code <http://git.code.sf.net/p/owfs/code> owfs-code
cvs history brought over.
2. Clean and test DS2409 (Microlan) hubs
Addressing problem found by Ors Tiszay
Works well with passive devices
Problems with powered slaves, but probably not a software issue.
3. Improved and tested owserver protocol for server-to-server communication
Use md5 hash for unique token
Fixed byte counting issue in write messages
Null-terminated string no longer required in path string
(problem pointed out by Stefano Miccoli)
4. Added /system/configuration/version
Reports owserver version
Request from Stefano Miccoli

Fixes
1. Double initialization of mutex fixed
Show stopper in FreeBSD
Found by Johan Strom



------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.  Get 
unparalleled scalability from the best Selenium testing platform available.
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Owfs-developers mailing list
Owfs-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/owfs-developers

Reply via email to