*/
case EINPROGRESS:
if (!my->info.write_blocked) {
- if (my->cb.write_blocked) {
- rcode = my->cb.write_blocked((fr_bio_t *) my);
- if (rcode < 0) return rcode;
- }
-
my->info.write_blocked = true;
+
+ rcode = fr_bio_write_blocked((fr_bio_t *) my);
+ if (rcode < 0) return rcode;
}
return fr_bio_error(IO_WOULD_BLOCK);
*/
my->info.write_blocked = true;
- if (my->cb.write_blocked) {
- error = fr_bio_write_blocked((fr_bio_t *) my);
- if (error < 0) return error;
- }
+ error = fr_bio_write_blocked((fr_bio_t *) my);
+ if (error < 0) return error;
return rcode;
}
*/
static ssize_t fr_bio_mem_write_next(fr_bio_t *bio, void *packet_ctx, void const *buffer, size_t size)
{
+ int error;
ssize_t rcode;
size_t room, leftover;
fr_bio_mem_t *my = talloc_get_type_abort(bio, fr_bio_mem_t);
return rcode;
}
- if (my->cb.write_blocked) {
- int error;
-
- error = my->cb.write_blocked(bio);
- if (error < 0) return error;
+ /*
+ * Tell previous BIOs in the chain that they are blocked.
+ */
+ error = fr_bio_write_blocked(bio);
+ if (error < 0) return error;
- fr_assert(error != 0); /* what to do? */
- }
+ fr_assert(error != 0); /* what to do? */
/*
* We had WOULD BLOCK, or wrote partial bytes. Save the data to the memory buffer, and ensure
my->info.write_blocked = true;
my->all_used = true;
- rcode = my->cb.write_blocked(bio);
+ /*
+ * Previous BIOs are blocked, but we still try to write retries.
+ */
+ rcode = fr_bio_write_blocked(bio);
if (rcode < 0) return rcode;
return fr_bio_error(IO_WOULD_BLOCK);