if (!write_block_to_dev(dcr)) {
berrno be;
Pmsg1(0, _("write_block_to_device Volume label failed. ERR=%s"),
- be.strerror(dev->dev_errno));
+ be.bstrerror(dev->dev_errno));
free_block(label_blk);
dcr->block = block;
unblock_device(dev);
if (!write_block_to_dev(dcr)) {
berrno be;
Pmsg1(0, _("write_block_to_device overflow block failed. ERR=%s"),
- be.strerror(dev->dev_errno));
+ be.bstrerror(dev->dev_errno));
unblock_device(dev);
return false; /* device locked */
}
/*
* Find which JobId corresponds to the current thread
*/
-uint32_t get_jobid_from_tid()
+uint32_t get_jobid_from_tid(pthread_t tid)
{
JCR *jcr;
uint32_t JobId = 0;
foreach_jcr(jcr) {
- if (pthread_equal(jcr->my_thread_id, pthread_self())) {
+ if (pthread_equal(jcr->my_thread_id, tid)) {
JobId = (uint32_t)jcr->JobId;
break;
}
void DEVICE::_dlock(const char *file, int line)
{
Dmsg4(sd_dbglvl, "dlock from %s:%d precnt=%d JobId=%u\n", file, line,
- m_count, get_jobid_from_tid());
+ m_count, get_jobid_from_tid(pthread_self()));
/* Note, this *really* should be protected by a mutex, but
* since it is only debug code we don't worry too much.
*/
if (m_count > 0 && pthread_equal(m_pid, pthread_self())) {
- Dmsg2(sd_dbglvl, "DEADLOCK !!!!!!!!!! from %s:%d\n", file, line);
+ Dmsg5(sd_dbglvl, "Possible DEADLOCK!! lock held by JobId=%u from %s:%d m_count=%d JobId=%u\n",
+ get_jobid_from_tid(m_pid),
+ file, line, m_count, get_jobid_from_tid(pthread_self()));
}
P(m_mutex);
m_pid = pthread_self();
void DEVICE::_dunlock(const char *file, int line)
{
m_count--;
- Dmsg4(sd_dbglvl, "dunlock from %s:%d postcnt=%d JobId=%u\n", file, line,
- m_count, get_jobid_from_tid());
+ Dmsg4(sd_dbglvl+1, "dunlock from %s:%d postcnt=%d JobId=%u\n", file, line,
+ m_count, get_jobid_from_tid(pthread_self()));
V(m_mutex);
}
{
int stat;
#ifdef SD_DEBUG_LOCK
- Dmsg4(sd_dbglvl, "r_dlock blked=%s from %s:%d JobId=%u\n", this->print_blocked(),
- file, line, get_jobid_from_tid());
+ Dmsg4(sd_dbglvl+1, "r_dlock blked=%s from %s:%d JobId=%u\n", this->print_blocked(),
+ file, line, get_jobid_from_tid(pthread_self()));
#else
Dmsg1(sd_dbglvl, "reclock blked=%s\n", this->print_blocked());
#endif
berrno be;
this->dunlock();
Emsg1(M_ABORT, 0, _("pthread_cond_wait failure. ERR=%s\n"),
- be.strerror(stat));
+ be.bstrerror(stat));
}
}
this->num_waiting--; /* no longer waiting */
*/
void _block_device(const char *file, int line, DEVICE *dev, int state)
{
- Dmsg3(sd_dbglvl, "block set %d from %s:%d\n", state, file, line);
-
ASSERT(dev->blocked() == BST_NOT_BLOCKED);
dev->set_blocked(state); /* make other threads wait */
dev->no_wait_id = pthread_self(); /* allow us to continue */
+ Dmsg3(sd_dbglvl, "set blocked=%s from %s:%d\n", dev->print_blocked(), file, line);
}
/*