summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Fergeau <cfergeau@redhat.com>2014-03-14 17:43:55 +0100
committerChristophe Fergeau <cfergeau@redhat.com>2014-04-16 17:11:38 +0200
commit3dd4723e48da6de886963d9781bf53dea65a7e42 (patch)
tree9c24e5f4308055e6f9998e0c3a77ed066f015c84
parentdc017bb9ae934594289b99a67d929f075e60819f (diff)
Add reds_stream_set_async_error_handler() helper
This replaces async_read_set_error_handler() which was unused. This sets a callback to be called when an async operation fails. We could pass the error_handler to each reds_stream_async_read() call, but as we will be using the same one for all async calls, it's more convenient to set it once and for all. AsyncRead is going to be private to reds_stream.c in one of the next commits, and the error handler will need to be set from reds.c, hence the move to a public RedsStream method.
-rw-r--r--server/reds_stream.c7
-rw-r--r--server/reds_stream.h5
2 files changed, 5 insertions, 7 deletions
diff --git a/server/reds_stream.c b/server/reds_stream.c
index 070a3d55..b9cddd02 100644
--- a/server/reds_stream.c
+++ b/server/reds_stream.c
@@ -389,11 +389,10 @@ int reds_stream_enable_ssl(RedsStream *stream, SSL_CTX *ctx)
return reds_stream_ssl_accept(stream);
}
-void async_read_set_error_handler(AsyncRead *async,
- AsyncReadError error_handler,
- void *opaque)
+void reds_stream_set_async_error_handler(RedsStream *stream,
+ AsyncReadError error_handler)
{
- async->error = error_handler;
+ stream->priv->async_read.error = error_handler;
}
static inline void async_read_clear_handlers(AsyncRead *obj)
diff --git a/server/reds_stream.h b/server/reds_stream.h
index 866679ae..a5b7a17e 100644
--- a/server/reds_stream.h
+++ b/server/reds_stream.h
@@ -39,9 +39,6 @@ typedef struct AsyncRead {
} AsyncRead;
void async_read_handler(int fd, int event, void *data);
-void async_read_set_error_handler(AsyncRead *async,
- AsyncReadError error_handler,
- void *opaque);
typedef struct RedsStreamPrivate RedsStreamPrivate;
@@ -67,6 +64,8 @@ typedef enum {
ssize_t reds_stream_read(RedsStream *s, void *buf, size_t nbyte);
void reds_stream_async_read(RedsStream *stream, uint8_t *data, size_t size,
AsyncReadDone read_done_cb, void *opaque);
+void reds_stream_set_async_error_handler(RedsStream *stream,
+ AsyncReadError error_handler);
ssize_t reds_stream_write(RedsStream *s, const void *buf, size_t nbyte);
ssize_t reds_stream_writev(RedsStream *s, const struct iovec *iov, int iovcnt);
bool reds_stream_write_all(RedsStream *stream, const void *in_buf, size_t n);