bin/118286: watch(8) allow use up to 10 snp* devices
Mykola Zubach
zuborg at advancedhosters.com
Tue Nov 27 09:50:03 PST 2007
>Number: 118286
>Category: bin
>Synopsis: watch(8) allow use up to 10 snp* devices
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Tue Nov 27 17:50:02 UTC 2007
>Closed-Date:
>Last-Modified:
>Originator: Mykola Zubach
>Release: 6.2-RELEASE-p8
>Organization:
AdvancedHosters.com
>Environment:
FreeBSD advancedhosters.com 6.2-RELEASE-p8 FreeBSD 6.2-RELEASE-p8 #3: Fri Nov 16 12:31:53 UTC 2007 root at advancedhosters.com:/usr/src/sys/i386/compile/Z i386
>Description:
for (c = '0'; c <= '9'; c++) {
This code is self explanatory
watch(8) do up to 10 tries to find not used /dev/snp*, and then fail
I've rewrite this part so it could use up to 999 snp devices.
>How-To-Repeat:
open 11 watch(8) sessions in parallel
>Fix:
/usr/src/usr.sbin/watch
patch < /path/2/patch
Patch attached with submission follows:
--- watch.c Tue Nov 27 19:44:33 2007
+++ watch.c.new Tue Nov 27 19:45:25 2007
@@ -152,19 +152,18 @@
static int
open_snp(void)
{
- char snp[] = {_PATH_DEV "snpX"};
- char c;
- int f, mode, pos;
+ char snp[] = {_PATH_DEV "snpXXX"};
+ int f, mode, pos, c;
- pos = strlen(snp) - 1;
+ pos = strlen(snp) - 3;
if (opt_write)
mode = O_RDWR;
else
mode = O_RDONLY;
if (opt_snpdev == NULL)
- for (c = '0'; c <= '9'; c++) {
- snp[pos] = c;
+ for (c = 0; c <= 999; c++) {
+ snprintf(snp+pos, 4, "%d", c);
if ((f = open(snp, mode)) < 0) {
if (errno == EBUSY)
continue;
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list