diff -durP burncd.orig/burncd.c burncd/burncd.c --- burncd.orig/burncd.c 2005-05-13 17:06:44.000000000 -0300 +++ burncd/burncd.c 2008-05-26 00:51:31.000000000 -0300 @@ -46,6 +46,7 @@ #include #define BLOCKS 16 +#define EJECT_TRIES 5 struct track_info { int file; @@ -316,9 +317,15 @@ err(EX_IOERR, "ioctl(CDRIOCSETBLOCKSIZE)"); } - if (eject) - if (ioctl(fd, CDIOCEJECT) < 0) + if (eject) { + int status, try = EJECT_TRIES, delay = 1; + while ((status = ioctl(fd, CDIOCEJECT)) < 0 && --try > 0) { + sleep(delay); + delay *= 2; + } + if (status < 0) err(EX_IOERR, "ioctl(CDIOCEJECT)"); + } close(fd); exit(EX_OK); } Only in burncd.orig: burncd.c.orig