dovecot: Added i_stream_set_destroy_callback().
dovecot at dovecot.org
dovecot at dovecot.org
Sat Dec 22 03:05:34 EET 2007
details: http://hg.dovecot.org/dovecot/rev/56a5a00e490c
changeset: 7023:56a5a00e490c
user: Timo Sirainen <tss at iki.fi>
date: Sat Dec 22 02:54:58 2007 +0200
description:
Added i_stream_set_destroy_callback().
diffstat:
4 files changed, 23 insertions(+)
src/lib/iostream-internal.h | 3 +++
src/lib/iostream.c | 2 ++
src/lib/istream.c | 10 ++++++++++
src/lib/istream.h | 8 ++++++++
diffs (70 lines):
diff -r ebdd050c0a58 -r 56a5a00e490c src/lib/iostream-internal.h
--- 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 @@ struct iostream_private {
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);
diff -r ebdd050c0a58 -r 56a5a00e490c src/lib/iostream.c
--- 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 @@ void io_stream_unref(struct iostream_pri
return;
stream->close(stream);
+ if (stream->destroy_callback != NULL)
+ stream->destroy_callback(stream->destroy_context);
stream->destroy(stream);
i_free(stream);
diff -r ebdd050c0a58 -r 56a5a00e490c src/lib/istream.c
--- 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
@@ -26,6 +26,16 @@ void i_stream_unref(struct istream **str
}
io_stream_unref(&(*stream)->real_stream->iostream);
*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)
diff -r ebdd050c0a58 -r 56a5a00e490c src/lib/istream.h
--- 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 {
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
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);
More information about the dovecot-cvs
mailing list