summaryrefslogtreecommitdiff
path: root/lib9p/tests/test_server/fs_slowread.c
diff options
context:
space:
mode:
authorLuke T. Shumaker <lukeshu@lukeshu.com>2025-04-12 20:43:18 -0600
committerLuke T. Shumaker <lukeshu@lukeshu.com>2025-04-12 21:37:47 -0600
commitfc115b98c8c41e0e76319839c0227d8f44381394 (patch)
treef700f538566aea6d5eaa1412beaf65f2c2caf566 /lib9p/tests/test_server/fs_slowread.c
parent6b6bc44e7948253f5793022aa6c1f3e3acdb348d (diff)
lib9p: Test+fix that io handles get freed
Diffstat (limited to 'lib9p/tests/test_server/fs_slowread.c')
-rw-r--r--lib9p/tests/test_server/fs_slowread.c41
1 files changed, 28 insertions, 13 deletions
diff --git a/lib9p/tests/test_server/fs_slowread.c b/lib9p/tests/test_server/fs_slowread.c
index 520edd2..c5db896 100644
--- a/lib9p/tests/test_server/fs_slowread.c
+++ b/lib9p/tests/test_server/fs_slowread.c
@@ -4,12 +4,17 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
+#include <stdlib.h>
+
#include "fs_slowread.h"
LO_IMPLEMENTATION_C(lib9p_srv_file, struct slowread_file, slowread_file, static);
-LO_IMPLEMENTATION_H(lib9p_srv_fio, struct slowread_file, slowread_file);
-LO_IMPLEMENTATION_C(lib9p_srv_fio, struct slowread_file, slowread_file, static);
+struct slowread_fio {
+ struct slowread_file *parent;
+};
+LO_IMPLEMENTATION_H(lib9p_srv_fio, struct slowread_fio, slowread_fio);
+LO_IMPLEMENTATION_C(lib9p_srv_fio, struct slowread_fio, slowread_fio, static);
/* srv_file *******************************************************************/
@@ -62,36 +67,46 @@ LIB9P_SRV_NOTDIR(struct slowread_file, slowread_file)
static lo_interface lib9p_srv_fio slowread_file_fopen(struct slowread_file *self, struct lib9p_srv_ctx *ctx, bool, bool, bool) {
assert(self);
assert(ctx);
- return lo_box_slowread_file_as_lib9p_srv_fio(self);
+
+ struct slowread_fio *ret = malloc(sizeof(struct slowread_fio));
+ ret->parent = self;
+
+ return lo_box_slowread_fio_as_lib9p_srv_fio(ret);
}
/* srv_fio ********************************************************************/
-static void slowread_file_iofree(struct slowread_file *self) {
+static void slowread_fio_iofree(struct slowread_fio *self) {
+ assert(self);
+ free(self);
+}
+
+static struct lib9p_qid slowread_fio_qid(struct slowread_fio *self) {
assert(self);
+ return slowread_file_qid(self->parent);
}
-static uint32_t slowread_file_iounit(struct slowread_file *self) {
+static uint32_t slowread_fio_iounit(struct slowread_fio *self) {
assert(self);
return 0;
}
-static uint32_t slowread_file_pwrite(struct slowread_file *LM_UNUSED(self),
- struct lib9p_srv_ctx *LM_UNUSED(ctx),
- void *LM_UNUSED(buf), uint32_t LM_UNUSED(byte_count),
- uint64_t LM_UNUSED(offset)) {
+static uint32_t slowread_fio_pwrite(struct slowread_fio *LM_UNUSED(self),
+ struct lib9p_srv_ctx *LM_UNUSED(ctx),
+ void *LM_UNUSED(buf), uint32_t LM_UNUSED(byte_count),
+ uint64_t LM_UNUSED(offset)) {
assert_notreached("not writable");
}
-static void slowread_file_pread(struct slowread_file *self, struct lib9p_srv_ctx *ctx,
- uint32_t byte_count, uint64_t LM_UNUSED(byte_offset),
- struct iovec *ret) {
+static void slowread_fio_pread(struct slowread_fio *self, struct lib9p_srv_ctx *ctx,
+ uint32_t byte_count, uint64_t LM_UNUSED(byte_offset),
+ struct iovec *ret) {
assert(self);
assert(ctx);
assert(ret);
while (!lib9p_srv_flush_requested(ctx))
cr_yield();
- if (self->flushable)
+ if (self->parent->flushable)
lib9p_srv_acknowledge_flush(ctx);
else
*ret = (struct iovec){