X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=device-src%2Fxfer-dest-taper-splitter.c;h=081e9b8dda5aaeec41ecaf7888a0982fdcc56bf2;hb=4f0b86f7a23848c16cfe82fae81e639917fcff27;hp=7295da389c90301ecfb9222bfd7c6c6a91a18014;hpb=42ff24f2a525d5965e1841b2ebe3ee0f4b918ac6;p=debian%2Famanda diff --git a/device-src/xfer-dest-taper-splitter.c b/device-src/xfer-dest-taper-splitter.c index 7295da3..081e9b8 100644 --- a/device-src/xfer-dest-taper-splitter.c +++ b/device-src/xfer-dest-taper-splitter.c @@ -1,6 +1,6 @@ /* * Amanda, The Advanced Maryland Automatic Network Disk Archiver - * Copyright (c) 2009, 2010 Zmanda, Inc. All Rights Reserved. + * Copyright (c) 2009-2012 Zmanda, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published @@ -181,7 +181,7 @@ _xdt_dbg(const char *fmt, ...) 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 @@ -540,18 +540,15 @@ device_thread_write_part( 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); @@ -562,7 +559,7 @@ part_done: 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 */ @@ -737,15 +734,15 @@ cancel_impl( /* 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; } @@ -876,7 +873,11 @@ get_part_bytes_written_impl( /* NOTE: this access is unsafe and may return inconsistent results (e.g, a * partial write to the 64-bit value on a 32-bit system). This is ok for * the moment, as it's only informational, but be warned. */ - return self->part_bytes_written; + if (self->device) { + return device_get_bytes_written(self->device); + } else { + return self->part_bytes_written; + } } static void