#include "stored.h"
/* Forward referenced functions */
-int dev_is_tape(DEVICE *dev);
-void clrerror_dev(DEVICE *dev, int func);
-int fsr_dev(DEVICE *dev, int num);
-
-extern int debug_level;
/*
* Allocate and initialize the DEVICE structure
if (dev->fd >= 0) {
dev->dev_errno = 0;
dev->state |= ST_OPENED;
- dev->use_count++;
+ dev->use_count = 1;
update_pos_dev(dev); /* update position */
}
/* Stop any open() timer we started */
} else {
dev->dev_errno = 0;
dev->state |= ST_OPENED;
- dev->use_count++;
+ dev->use_count = 1;
update_pos_dev(dev); /* update position */
}
Dmsg1(29, "open_dev: disk fd=%d opened\n", dev->fd);
Emsg0(M_FATAL, 0, dev->errmsg);
return 0;
}
- dev->state &= ~(ST_APPEND|ST_READ|ST_EOT | ST_EOF | ST_WEOT); /* remove EOF/EOT flags */
+ dev->state &= ~(ST_APPEND|ST_READ|ST_EOT|ST_EOF|ST_WEOT); /* remove EOF/EOT flags */
dev->block_num = dev->file = 0;
dev->file_addr = 0;
if (dev->state & ST_TAPE) {
return 1;
}
+ dev->state &= ~(ST_APPEND|ST_READ|ST_EOT|ST_EOF|ST_WEOT); /* remove EOF/EOT flags */
dev->block_num = dev->file = 0;
dev->file_addr = 0;
#ifdef MTUNLOCK
static void do_close(DEVICE *dev)
{
- Dmsg0(29, "really close_dev\n");
+ Dmsg1(29, "really close_dev %s\n", dev->dev_name);
close(dev->fd);
/* Clean up device packet so it can be reused */
dev->fd = -1;
stop_thread_timer(dev->tid);
dev->tid = 0;
}
+ dev->use_count = 0;
}
/*
}
if (dev->fd >= 0 && dev->use_count == 1) {
do_close(dev);
+ } else if (dev->use_count > 0) {
+ dev->use_count--;
}
- dev->use_count--;
+
+#ifdef FULL_DEBUG
+ ASSERT(dev->use_count >= 0);
+#endif
}
/*
Emsg0(M_FATAL, 0, dev->errmsg);
return;
}
- Dmsg0(29, "really close_dev\n");
+ Dmsg1(29, "Force close_dev %s\n", dev->dev_name);
do_close(dev);
- dev->use_count--;
+
+#ifdef FULL_DEBUG
+ ASSERT(dev->use_count >= 0);
+#endif
}
int truncate_dev(DEVICE *dev)