浏览代码

faux.async: Add input and output lists, overflow value

Serj Kalichev 3 年之前
父节点
当前提交
9c31bb8f50
共有 2 个文件被更改,包括 41 次插入4 次删除
  1. 34 2
      faux/async/async.c
  2. 7 2
      faux/async/private.h

+ 34 - 2
faux/async/async.c

@@ -23,6 +23,7 @@
 
 #include "private.h"
 
+#define DATA_CHUNK 4096
 
 /** @brief Create new async I/O object.
  *
@@ -53,14 +54,23 @@ faux_async_t *faux_async_new(int fd)
 
 	// Init
 	async->fd = fd;
-	// Read
+
+	// Read (Input)
 	async->read_cb = NULL;
 	async->read_udata = NULL;
 	async->min = 1;
 	async->max = 0; // Indefinite
-	// Write
+	async->i_list = faux_list_new(FAUX_LIST_UNSORTED, FAUX_LIST_NONUNIQUE,
+		NULL, NULL, faux_free);
+	async->i_pos = 0;
+
+	// Write (Output)
 	async->stall_cb = NULL;
 	async->stall_udata = NULL;
+	async->overflow = 10000000l; // ~ 10M
+	async->o_list = faux_list_new(FAUX_LIST_UNSORTED, FAUX_LIST_NONUNIQUE,
+		NULL, NULL, faux_free);
+	async->o_pos = 0;
 
 	return async;
 }
@@ -75,6 +85,9 @@ void faux_async_free(faux_async_t *async)
 	if (!async)
 		return;
 
+	faux_list_free(async->i_list);
+	faux_list_free(async->o_list);
+
 	faux_free(async);
 }
 
@@ -160,3 +173,22 @@ void faux_async_set_stall_cb(faux_async_t *async,
 	async->stall_cb = stall_cb;
 	async->stall_udata = user_data;
 }
+
+
+/** @brief Set overflow value.
+ *
+ * "Overflow" is a value when engine consider data consumer as a stalled.
+ * Data gets into the async I/O object buffer but object can't write it to
+ * serviced fd for too long time. So it accumulates great amount of data.
+ *
+ * @param [in] async Allocated and initialized async I/O object.
+ * @param [in] overflow Overflow value.
+ */
+void faux_async_set_overflow(faux_async_t *async, size_t overflow)
+{
+	assert(async);
+	if (!async)
+		return;
+
+	async->overflow = overflow;
+}

+ 7 - 2
faux/async/private.h

@@ -8,9 +8,14 @@ struct faux_async_s {
 	// Read
 	faux_async_read_cb_f read_cb; // Read callback
 	void *read_udata;
-	ssize_t min;
-	ssize_t max;
+	size_t min;
+	size_t max;
+	faux_list_t *i_list;
+	size_t i_pos;
 	// Write
 	faux_async_stall_cb_f stall_cb; // Stall callback
 	void *stall_udata;
+	faux_list_t *o_list;
+	size_t o_pos;
+	size_t overflow;
 };