Browse Source

faux.async: Fix possible memory leak in faux_async_in()

Serj Kalichev 2 years ago
parent
commit
d19d972f57
1 changed files with 7 additions and 4 deletions
  1. 7 4
      faux/async/async.c

+ 7 - 4
faux/async/async.c

@@ -418,12 +418,16 @@ ssize_t faux_async_in(faux_async_t *async)
 				(errno != EINTR) &&
 				(errno != EAGAIN) &&
 				(errno != EWOULDBLOCK)
-			)
+			) {
+				faux_buf_dwrite_unlock_easy(async->ibuf, 0);
 				return -1;
+			}
 		}
 		faux_buf_dwrite_unlock_easy(async->ibuf, bytes_readed);
 		total_readed += bytes_readed;
 
+		if (!async->read_cb) // No read callback
+			continue;
 		// Check for amount of stored data
 		while ((bytes_stored = faux_buf_len(async->ibuf)) >= async->min) {
 			size_t copy_len = 0;
@@ -440,9 +444,8 @@ ssize_t faux_async_in(faux_async_t *async)
 			faux_buf_read(async->ibuf, buf, copy_len);
 
 			// Execute callback
-			if (async->read_cb)
-				async->read_cb(async, buf,
-					copy_len, async->read_udata);
+			async->read_cb(async, buf,
+				copy_len, async->read_udata);
 		}
 	} while (bytes_readed == locked_len);