Mercurial > dovecot > original-hg > dovecot-1.2
changeset 7023:56a5a00e490c HEAD
Added i_stream_set_destroy_callback().
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 22 Dec 2007 02:54:58 +0200 |
parents | ebdd050c0a58 |
children | b42691420ff8 |
files | src/lib/iostream-internal.h src/lib/iostream.c src/lib/istream.c src/lib/istream.h |
diffstat | 4 files changed, 23 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/iostream-internal.h Sat Dec 22 02:53:20 2007 +0200 +++ b/src/lib/iostream-internal.h Sat Dec 22 02:54:58 2007 +0200 @@ -10,6 +10,9 @@ void (*destroy)(struct iostream_private *stream); void (*set_max_buffer_size)(struct iostream_private *stream, size_t max_size); + + void (*destroy_callback)(void *context); + void *destroy_context; }; void io_stream_init(struct iostream_private *stream);
--- a/src/lib/iostream.c Sat Dec 22 02:53:20 2007 +0200 +++ b/src/lib/iostream.c Sat Dec 22 02:54:58 2007 +0200 @@ -30,6 +30,8 @@ return; stream->close(stream); + if (stream->destroy_callback != NULL) + stream->destroy_callback(stream->destroy_context); stream->destroy(stream); i_free(stream);
--- a/src/lib/istream.c Sat Dec 22 02:53:20 2007 +0200 +++ b/src/lib/istream.c Sat Dec 22 02:54:58 2007 +0200 @@ -28,6 +28,16 @@ *stream = NULL; } +#undef i_stream_set_destroy_callback +void i_stream_set_destroy_callback(struct istream *stream, + istream_callback_t *callback, void *context) +{ + struct iostream_private *iostream = &stream->real_stream->iostream; + + iostream->destroy_callback = callback; + iostream->destroy_context = context; +} + int i_stream_get_fd(struct istream *stream) { struct istream_private *_stream = stream->real_stream;
--- a/src/lib/istream.h Sat Dec 22 02:53:20 2007 +0200 +++ b/src/lib/istream.h Sat Dec 22 02:54:58 2007 +0200 @@ -18,6 +18,8 @@ struct istream_private *real_stream; }; +typedef void istream_callback_t(void *context); + struct istream *i_stream_create_fd(int fd, size_t max_buffer_size, bool autoclose_fd); struct istream *i_stream_create_mmap(int fd, size_t block_size, @@ -35,6 +37,12 @@ void i_stream_ref(struct istream *stream); /* Unreferences the stream and sets stream pointer to NULL. */ void i_stream_unref(struct istream **stream); +/* Call the given callback function when stream is destroyed. */ +void i_stream_set_destroy_callback(struct istream *stream, + istream_callback_t *callback, void *context); +#define i_stream_set_destroy_callback(stream, callback, context) \ + CONTEXT_CALLBACK(i_stream_set_destroy_callback, istream_callback_t, \ + callback, context, stream) /* Return file descriptor for stream, or -1 if none is available. */ int i_stream_get_fd(struct istream *stream);