--- cdparanoia-III-alpha9.8/interface/scan_devices.c.ebusy 2005-12-15 10:28:24.000000000 -0500 +++ cdparanoia-III-alpha9.8/interface/scan_devices.c 2005-12-15 10:31:15.000000000 -0500 @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -193,7 +194,7 @@ /* Ping for CDROM-ness */ fd=open(device,O_RDONLY|O_NONBLOCK|O_EXCL); - for (i = 0; (i<10) && (fd == -1); i++) { + for (i = 0; i<10 && fd == -1 && errno == EBUSY; i++) { fprintf(stderr, "Error trying to open %s exclusively (%s). retrying in 1 second.\n", device, strerror(errno)); usleep(1000000 + 100000.0 * rand()/(RAND_MAX+1.0)); fd = open(device,O_RDONLY|O_NONBLOCK|O_EXCL); @@ -327,7 +328,7 @@ char buffer[200]; dev=open(device,O_RDONLY|O_NONBLOCK|O_EXCL); - for (i = 0; (i<10) && (dev == -1); i++) { + for (i = 0; i<10 && dev == -1 && errno == EBUSY; i++) { fprintf(stderr, "Error trying to open %s exclusively (%s). retrying in 1 second.\n", device, strerror(errno)); usleep(1000000 + 100000.0 * rand()/(RAND_MAX+1.0)); dev = open(device,O_RDONLY|O_NONBLOCK|O_EXCL); @@ -704,14 +705,14 @@ if(ioctl_device) { i_fd=open(ioctl_device,O_RDONLY|O_NONBLOCK|O_EXCL); - for(i=0; (i<10) && (i_fd==-1); i++) { + for(i=0; i<10 && i_fd==-1 && errno == EBUSY; i++) { fprintf(stderr, "Error trying to open %s exclusively (%s). retrying in 1 second.\n", ioctl_device, strerror(errno)); usleep(1000000 + 100000.0 * rand()/(RAND_MAX+1.0)); i_fd=open(ioctl_device,O_RDONLY|O_NONBLOCK|O_EXCL); } } g_fd=open(generic_device,O_RDWR|O_EXCL); - for(i=0; (i<10) && (g_fd==-1); i++) { + for(i=0; i<10 && g_fd==-1 && errno == EBUSY; i++) { fprintf(stderr, "Error trying to open %s exclusively (%s). retrying in 1 second.\n", generic_device, strerror(errno)); usleep(1000000 + 100000.0 * rand()/(RAND_MAX+1.0)); g_fd=open(generic_device,O_RDWR|O_EXCL); @@ -877,7 +878,7 @@ /* I'm not certain this one nees O_EXCL, but it can't hurt */ fd=open(filename,O_RDONLY|O_EXCL); - for(i=0; (i<10) && (fd==-1); i++) { + for(i=0; i<10 && fd==-1 && errno == EBUSY; i++) { fprintf(stderr, "Error trying to open %s exclusively (%s). retrying in 1 second.\n", filename, strerror(errno)); usleep(1000000 + 100000.0 * rand()/(RAND_MAX+1.0)); fd=open(filename,O_RDONLY|O_EXCL);