tevent: add tevent_fd_set_auto_close()
authorStefan Metzmacher <metze@samba.org>
Sat, 3 Jan 2009 11:39:11 +0000 (12:39 +0100)
committerStefan Metzmacher <metze@samba.org>
Sat, 3 Jan 2009 18:58:51 +0000 (19:58 +0100)
tevent_fd_set_auto_close() is a simple wrapper
arround tevent_fd_set_close_fn() with a callback
that uses plain close(2).

metze

lib/tevent/testsuite.c
lib/tevent/tevent.c
lib/tevent/tevent.h

index ec57c5ad2ebae78d2e44d4c4012a8c7f55a399c0..1b811f5fa2e899a75b876353e8477fa1b87ab5b5 100644 (file)
@@ -81,8 +81,9 @@ static bool test_event_context(struct torture_context *test,
        /* create a pipe */
        pipe(fd);
 
-       fde = event_add_fd(ev_ctx, ev_ctx, fd[0], EVENT_FD_READ|EVENT_FD_AUTOCLOSE, 
+       fde = event_add_fd(ev_ctx, ev_ctx, fd[0], EVENT_FD_READ,
                           fde_handler, fd);
+       tevent_fd_set_auto_close(fde);
 
        event_add_timed(ev_ctx, ev_ctx, timeval_current_ofs(2,0), 
                        finished_handler, &finished);
index 93918cc14dc9146bf738d5337e9f4f724ae77a9f..5582b583e7304c06867033dea97f1acdba00f7ae 100644 (file)
@@ -53,6 +53,7 @@
 
 */
 #include "replace.h"
+#include "system/filesys.h"
 #include "tevent.h"
 #include "tevent_internal.h"
 #include "tevent_util.h"
@@ -250,6 +251,19 @@ void tevent_fd_set_close_fn(struct tevent_fd *fde,
        fde->event_ctx->ops->set_fd_close_fn(fde, close_fn);
 }
 
+static void tevent_fd_auto_close_fn(struct tevent_context *ev,
+                                   struct tevent_fd *fde,
+                                   int fd,
+                                   void *private_data)
+{
+       close(fd);
+}
+
+void tevent_fd_set_auto_close(struct tevent_fd *fde)
+{
+       tevent_fd_set_close_fn(fde, tevent_fd_auto_close_fn);
+}
+
 /*
   return the fd event flags
 */
index 9d3b8aa39e8b733ac07270836594b8c9723e8cfc..b02c7854bc5d7c2b45f5fd528e2659b4bcee02f7 100644 (file)
@@ -113,6 +113,7 @@ int tevent_loop_wait(struct tevent_context *ev);
 
 void tevent_fd_set_close_fn(struct tevent_fd *fde,
                            tevent_fd_close_fn_t close_fn);
+void tevent_fd_set_auto_close(struct tevent_fd *fde);
 uint16_t tevent_fd_get_flags(struct tevent_fd *fde);
 void tevent_fd_set_flags(struct tevent_fd *fde, uint16_t flags);