diff --git a/mongoose.c b/mongoose.c index df264193..f45fe696 100644 --- a/mongoose.c +++ b/mongoose.c @@ -518,6 +518,9 @@ const char **mg_get_valid_option_names(void) { } static void *call_user(struct mg_connection *conn, enum mg_event event) { + if (conn != NULL && conn->ctx != NULL) { + conn->request_info.user_data = conn->ctx->user_data; + } return conn == NULL || conn->ctx == NULL || conn->ctx->user_callback == NULL ? NULL : conn->ctx->user_callback(event, conn); } diff --git a/test/unit_test.c b/test/unit_test.c index 111cb02e..070ba731 100644 --- a/test/unit_test.c +++ b/test/unit_test.c @@ -333,6 +333,22 @@ static void test_lua(void) { } #endif +static void *user_data_tester(enum mg_event event, struct mg_connection *conn) { + struct mg_request_info *ri = mg_get_request_info(conn); + ASSERT(ri->user_data == (void *) 123); + ASSERT(event == MG_NEW_REQUEST); + return NULL; +} + +static void test_user_data(void) { + static const char *options[] = {"listening_ports", UNUSED_PORT, NULL}; + struct mg_context *ctx; + + ASSERT((ctx = mg_start(user_data_tester, (void *) 123, options)) != NULL); + ASSERT(ctx->user_data == (void *) 123); + call_user(fc(ctx), MG_NEW_REQUEST); +} + int main(void) { test_base64_encode(); test_match_prefix(); @@ -343,6 +359,7 @@ int main(void) { test_mg_get_var(); test_set_throttle(); test_next_option(); + test_user_data(); #ifdef USE_LUA test_lua(); #endif