/*
* UCW Library -- Main Loop: Record I/O
*
- * (c) 2011 Martin Mares <mj@ucw.cz>
+ * (c) 2011--2012 Martin Mares <mj@ucw.cz>
*
* This software may be freely distributed and used according to the terms
* of the GNU Lesser General Public License.
#undef LOCAL_DEBUG
-#include "ucw/lib.h"
-#include "ucw/mainloop.h"
+#include <ucw/lib.h>
+#include <ucw/mainloop.h>
#include <stdio.h>
#include <string.h>
void
rec_io_del(struct main_rec_io *rio)
{
+ if (!rec_io_is_active(rio))
+ return;
+
timer_del(&rio->timer);
- if (hook_is_active(&rio->start_read_hook))
- hook_del(&rio->start_read_hook);
+ hook_del(&rio->start_read_hook);
file_del(&rio->file);
if (rio->read_buf)
DBG("RIO READ: rec_start=%u avail=%u prev_avail=%u free=%u/%u",
rec_start_pos, rio->read_avail, rio->read_prev_avail,
free_space, rio->read_buf_size);
- // FIXME: Constants?
if (free_space <= rio->read_buf_size/8)
{
if (rec_start_pos && rec_start_pos >= rio->read_buf_size/2)
rec_io_stop_write(struct main_rec_io *rio)
{
DBG("RIO WRITE: Stopping write");
- ASSERT(!rio->write_watermark);
+ // XXX: When we are called after a write error, there might still
+ // be some data queued, but we need not care.
rio->file.write_handler = NULL;
file_chg(&rio->file);
}