]> granicus.if.org Git - apache/commitdiff
Socket event callback now takes pollfd.
authorTakashi Sato <takashi@apache.org>
Wed, 11 Jun 2014 16:39:34 +0000 (16:39 +0000)
committerTakashi Sato <takashi@apache.org>
Wed, 11 Jun 2014 16:39:34 +0000 (16:39 +0000)
User (e.g. mod_proxy_wstunnel) can know
which socket is ready.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1601943 13f79535-47bb-0310-9956-ffa450edef68

include/ap_mmn.h
include/ap_mpm.h
include/mpm_common.h
modules/proxy/mod_proxy_wstunnel.c
server/mpm/event/event.c
server/mpm_common.c

index 55cc96395db382b85b4c35ce302489cba9e283ee..6aaf04dc1dfdd3eda5354dd8eb9795ddb63e3816 100644 (file)
  * 20140207.6 (2.5.0-dev)  Added ap_log_common().
  * 20140207.7 (2.5.0-dev)  Added ap_force_set_tz().
  * 20140207.8 (2.5.0-dev)  Added ap_shutdown_conn().
+ * 20140611.0 (2.5.0-dev)  Add ap_mpm_socket_callback_fn_t.
+                           Changes 3rd argument's type of
+                           ap_mpm_register_socket_callback and 
+                           ap_mpm_register_socket_callback_timeout.
  */
 
 #define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
 
 #ifndef MODULE_MAGIC_NUMBER_MAJOR
-#define MODULE_MAGIC_NUMBER_MAJOR 20140207
+#define MODULE_MAGIC_NUMBER_MAJOR 20140611
 #endif
-#define MODULE_MAGIC_NUMBER_MINOR 8                  /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 0                  /* 0...n */
 
 /**
  * Determine if the server's current MODULE_MAGIC_NUMBER is at least a
index d50acd95e3af312aaaad4fc69472dc73affb59f4..facabf95e152fa541df2ecde93430de7f4157df9 100644 (file)
@@ -198,6 +198,7 @@ AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result);
 /** @} */
 
 typedef void (ap_mpm_callback_fn_t)(void *baton);
+typedef void (ap_mpm_socket_callback_fn_t)(void *baton, const apr_pollfd_t *pdf);
 
 /* only added support in the Event MPM....  check for APR_ENOTIMPL */
 AP_DECLARE(apr_status_t) ap_mpm_resume_suspended(conn_rec *c);
@@ -222,7 +223,7 @@ AP_DECLARE(apr_status_t) ap_mpm_register_timed_callback(apr_time_t t,
 AP_DECLARE(apr_status_t) ap_mpm_register_socket_callback(apr_socket_t **s,
                                                          apr_pool_t *p,
                                                          int for_read, 
-                                                         ap_mpm_callback_fn_t *cbfn,
+                                                         ap_mpm_socket_callback_fn_t *cbfn,
                                                          void *baton);
  /**
  * Register a callback on the readability or writability on a group of sockets, with a timeout
@@ -243,7 +244,7 @@ AP_DECLARE(apr_status_t) ap_mpm_register_socket_callback(apr_socket_t **s,
 AP_DECLARE(apr_status_t) ap_mpm_register_socket_callback_timeout(apr_socket_t **s,
                                                          apr_pool_t *p,
                                                          int for_read, 
-                                                         ap_mpm_callback_fn_t *cbfn,
+                                                         ap_mpm_socket_callback_fn_t *cbfn,
                                                          ap_mpm_callback_fn_t *tofn,
                                                          void *baton,
                                                          apr_time_t timeout);
index 4031b51ddf1f96175f044f74cdac07d77387d13e..f3a66eed5eb0a181416ad02d1be673ad48d25c9d 100644 (file)
@@ -427,7 +427,7 @@ AP_DECLARE_HOOK(apr_status_t, mpm_register_timed_callback,
  * @ingroup hooks
  */
 AP_DECLARE_HOOK(apr_status_t, mpm_register_socket_callback,
-                (apr_socket_t **s, apr_pool_t *p, int for_read, ap_mpm_callback_fn_t *cbfn, void *baton))
+                (apr_socket_t **s, apr_pool_t *p, int for_read, ap_mpm_socket_callback_fn_t *cbfn, void *baton))
 
 /* register the specified callback, with timeout 
  * @ingroup hooks
@@ -435,7 +435,7 @@ AP_DECLARE_HOOK(apr_status_t, mpm_register_socket_callback,
  */
 AP_DECLARE_HOOK(apr_status_t, mpm_register_socket_callback_timeout,
                 (apr_socket_t **s, apr_pool_t *p, int for_read, 
-                 ap_mpm_callback_fn_t *cbfn,  
+                 ap_mpm_socket_callback_fn_t *cbfn,  
                  ap_mpm_callback_fn_t *tofn, 
                  void *baton, 
                  apr_time_t timeout))
index 3939df2fa28d3f8d5f9b7203fcff062d701744c5..8ef8761be9c9f79354a02d56af6bf4e0ac04f620 100644 (file)
@@ -38,7 +38,7 @@ typedef struct ws_baton_t {
 
 static apr_status_t proxy_wstunnel_transfer(request_rec *r, conn_rec *c_i, conn_rec *c_o,
                                      apr_bucket_brigade *bb, char *name);
-static void proxy_wstunnel_callback(void *b);
+static void proxy_wstunnel_callback(void *b, const apr_pollfd_t *dummy);
 
 static int proxy_wstunnel_pump(ws_baton_t *baton, apr_time_t timeout, int try_async) {
     request_rec *r = baton->r;
@@ -164,7 +164,7 @@ static void proxy_wstunnel_cancel_callback(void *b)
  *  We don't need the invoke_mtx, since we never put multiple callback events
  *  in the queue.
  */
-static void proxy_wstunnel_callback(void *b) { 
+static void proxy_wstunnel_callback(void *b, const apr_pollfd_t *dummy) { 
     int status;
     apr_socket_t *sockets[3] = {NULL, NULL, NULL};
     ws_baton_t *baton = (ws_baton_t*)b;
index 2f5229aaa241331e5dfaafcf4d3034af23c67f60..9979ee03e50b2aa96895aaa9e767cfd5ba9aaf9e 100644 (file)
@@ -320,7 +320,7 @@ typedef struct
 
 typedef struct
 {
- ap_mpm_callback_fn_t *cbfunc;
+ ap_mpm_socket_callback_fn_t *cbfunc;
  void *user_baton; 
  apr_pollfd_t **pfds;
  int nsock;
@@ -1488,7 +1488,7 @@ static apr_status_t event_register_timed_callback(apr_time_t t,
 static apr_status_t event_register_socket_callback_ex(apr_socket_t **s, 
                                                   apr_pool_t *p, 
                                                   int for_read,
-                                                  ap_mpm_callback_fn_t *cbfn,
+                                                  ap_mpm_socket_callback_fn_t *cbfn,
                                                   ap_mpm_callback_fn_t *tofn,
                                                   void *baton, 
                                                   apr_time_t timeout)
@@ -1536,7 +1536,7 @@ static apr_status_t event_register_socket_callback_ex(apr_socket_t **s,
 static apr_status_t event_register_socket_callback(apr_socket_t **s, 
                                                   apr_pool_t *p, 
                                                   int for_read,
-                                                  ap_mpm_callback_fn_t *cbfn,
+                                                  ap_mpm_socket_callback_fn_t *cbfn,
                                                   void *baton)
 {
     return event_register_socket_callback_ex(s, p, for_read, 
@@ -1657,6 +1657,12 @@ static void process_timeout_queue(struct timeout_queue *q,
     apr_thread_mutex_lock(timeout_mutex);
 }
 
+static void socket_callback_wrapper(void *baton){
+    const apr_pollfd_t *out_pfd = (const apr_pollfd_t *)baton;
+    socket_callback_baton_t *scb_baton = (socket_callback_baton_t *) ((listener_poll_type *) out_pfd->client_data)->baton;
+    scb_baton->cbfunc(scb_baton->user_baton, out_pfd);
+}
+
 static void * APR_THREAD_FUNC listener_thread(apr_thread_t * thd, void *dummy)
 {
     timer_event_t *ep;
@@ -1974,8 +1980,8 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t * thd, void *dummy)
                 if (!(baton->signaled)) { 
                     baton->signaled = 1;
                     te = event_get_timer_event(-1 /* fake timer */, 
-                                               baton->cbfunc
-                                               baton->user_baton, 
+                                               socket_callback_wrapper
+                                               (apr_pollfd_t *)out_pfd,
                                                0, /* don't insert it */
                                                NULL /* no associated socket callback */);
                     /* remove other sockets in my set */
index 387c5cd06b0fc63aa0dcf56c1772d82e08b5b9e0..1fba06e810b0fe211e7c10b87f7a5cbc8840d9d8 100644 (file)
@@ -108,10 +108,10 @@ AP_IMPLEMENT_HOOK_RUN_FIRST(apr_status_t, mpm_resume_suspended,
                             (conn_rec *c),
                             (c), APR_ENOTIMPL)
 AP_IMPLEMENT_HOOK_RUN_FIRST(apr_status_t, mpm_register_socket_callback,
-                            (apr_socket_t **s, apr_pool_t *p, int for_read, ap_mpm_callback_fn_t *cbfn, void *baton),
+                            (apr_socket_t **s, apr_pool_t *p, int for_read, ap_mpm_socket_callback_fn_t *cbfn, void *baton),
                             (s, p, for_read, cbfn, baton), APR_ENOTIMPL)
 AP_IMPLEMENT_HOOK_RUN_FIRST(apr_status_t, mpm_register_socket_callback_timeout,
-                            (apr_socket_t **s, apr_pool_t *p, int for_read, ap_mpm_callback_fn_t *cbfn, ap_mpm_callback_fn_t *tofn, void *baton, apr_time_t timeout),
+                            (apr_socket_t **s, apr_pool_t *p, int for_read, ap_mpm_socket_callback_fn_t *cbfn, ap_mpm_callback_fn_t *tofn, void *baton, apr_time_t timeout),
                             (s, p, for_read, cbfn, tofn, baton, timeout), APR_ENOTIMPL)
 AP_IMPLEMENT_HOOK_RUN_FIRST(apr_status_t, mpm_unregister_socket_callback,
                             (apr_socket_t **s, apr_pool_t *p),
@@ -559,14 +559,14 @@ AP_DECLARE(apr_status_t) ap_mpm_register_timed_callback(apr_time_t t, ap_mpm_cal
 {
     return ap_run_mpm_register_timed_callback(t, cbfn, baton);
 }
-AP_DECLARE(apr_status_t) ap_mpm_register_socket_callback(apr_socket_t **s, apr_pool_t *p, int for_read, ap_mpm_callback_fn_t *cbfn, void *baton)
+AP_DECLARE(apr_status_t) ap_mpm_register_socket_callback(apr_socket_t **s, apr_pool_t *p, int for_read, ap_mpm_socket_callback_fn_t *cbfn, void *baton)
 {
     return ap_run_mpm_register_socket_callback(s, p, for_read, cbfn, baton);
 }
 AP_DECLARE(apr_status_t) ap_mpm_register_socket_callback_timeout(apr_socket_t **s, 
                                                                  apr_pool_t *p, 
                                                                  int for_read, 
-                                                                 ap_mpm_callback_fn_t *cbfn, 
+                                                                 ap_mpm_socket_callback_fn_t *cbfn, 
                                                                  ap_mpm_callback_fn_t *tofn, 
                                                                  void *baton, 
                                                                  apr_time_t timeout)