arglist_start(argp, fmt);
g_vsnprintf(msg, sizeof(msg), fmt, argp);
arglist_end(argp);
- g_debug("XDT thd-%p: %s", g_thread_self(), msg);
+ g_debug("XDT: %s", msg);
}
/* "Fast forward" the slice list by the given length. This will free any
g_mutex_unlock(self->ring_mutex);
part_done:
- if (elt->cancelled) {
- g_timer_destroy(timer);
- return NULL;
- }
-
/* if we write all of the blocks, but the finish_file fails, then likely
* there was some buffering going on in the device driver, and the blocks
* did not all make it to permanent storage -- so it's a failed part. Note
* that we try to finish_file even if the part failed, just to be thorough. */
if (self->device->in_file) {
if (!device_finish_file(self->device))
- part_status = PART_FAILED;
+ if (!elt->cancelled) {
+ part_status = PART_FAILED;
+ }
}
g_timer_stop(timer);
msg->partnum = self->partnum;
msg->fileno = fileno;
msg->successful = self->last_part_successful = part_status != PART_FAILED;
- msg->eom = self->last_part_eom = (part_status == PART_LEOM || !msg->successful);
+ msg->eom = self->last_part_eom = part_status == PART_LEOM || self->device->is_eom;
msg->eof = self->last_part_eof = part_status == PART_EOF;
/* time runs backward on some test boxes, so make sure this is positive */
/* then signal all of our condition variables, so that threads waiting on them
* wake up and see elt->cancelled. */
- g_mutex_lock(self->state_mutex);
- g_cond_broadcast(self->state_cond);
- g_mutex_unlock(self->state_mutex);
-
g_mutex_lock(self->ring_mutex);
g_cond_broadcast(self->ring_add_cond);
g_cond_broadcast(self->ring_free_cond);
g_mutex_unlock(self->ring_mutex);
+ g_mutex_lock(self->state_mutex);
+ g_cond_broadcast(self->state_cond);
+ g_mutex_unlock(self->state_mutex);
+
return rv;
}