From: <kt...@us...> - 2009-06-30 15:00:15
|
Revision: 3164 http://milter-manager.svn.sourceforge.net/milter-manager/?rev=3164&view=rev Author: ktou Date: 2009-06-30 15:00:12 +0000 (Tue, 30 Jun 2009) Log Message: ----------- * milter/manager/milter-manager-children.c: avoid double quit. Modified Paths: -------------- milter-manager/trunk/ChangeLog milter-manager/trunk/milter/manager/milter-manager-children.c Modified: milter-manager/trunk/ChangeLog =================================================================== --- milter-manager/trunk/ChangeLog 2009-06-30 14:41:19 UTC (rev 3163) +++ milter-manager/trunk/ChangeLog 2009-06-30 15:00:12 UTC (rev 3164) @@ -1,5 +1,7 @@ 2009-06-30 Kouhei Sutou <ko...@cl...> + * milter/manager/milter-manager-children.c: avoid double quit. + * README*: add sgyk. Thanks!!! * milter/manager/milter-manager-children.[ch], Modified: milter-manager/trunk/milter/manager/milter-manager-children.c =================================================================== --- milter-manager/trunk/milter/manager/milter-manager-children.c 2009-06-30 14:41:19 UTC (rev 3163) +++ milter-manager/trunk/milter/manager/milter-manager-children.c 2009-06-30 15:00:12 UTC (rev 3164) @@ -2240,6 +2240,18 @@ } static void +set_state (MilterManagerChildren *children, + MilterServerContextState state) +{ + MilterManagerChildrenPrivate *priv; + + priv = MILTER_MANAGER_CHILDREN_GET_PRIVATE(children); + + priv->state = state; + priv->processing_state = priv->state; +} + +static void init_reply_queue (MilterManagerChildren *children, MilterServerContextState state) { @@ -2247,9 +2259,8 @@ priv = MILTER_MANAGER_CHILDREN_GET_PRIVATE(children); + set_state(children, state); queue_clear(priv->reply_queue); - priv->state = state; - priv->processing_state = priv->state; g_hash_table_insert(priv->reply_statuses, GINT_TO_POINTER(state), GINT_TO_POINTER(MILTER_STATUS_NOT_CHANGE)); @@ -3003,11 +3014,15 @@ priv = MILTER_MANAGER_CHILDREN_GET_PRIVATE(children); - init_reply_queue(children, MILTER_SERVER_CONTEXT_STATE_QUIT); + set_state(children, MILTER_SERVER_CONTEXT_STATE_QUIT); for (child = priv->milters; child; child = g_list_next(child)) { - MilterServerContext *context = MILTER_SERVER_CONTEXT(child->data); - g_queue_push_tail(priv->reply_queue, context); - if (milter_server_context_quit(context)) + MilterServerContext *context; + MilterServerContextState state; + + context = MILTER_SERVER_CONTEXT(child->data); + state = milter_server_context_get_state(context); + if (state == MILTER_SERVER_CONTEXT_STATE_QUIT || + milter_server_context_quit(context)) success = TRUE; } @@ -3026,10 +3041,9 @@ priv = MILTER_MANAGER_CHILDREN_GET_PRIVATE(children); - init_reply_queue(children, MILTER_SERVER_CONTEXT_STATE_ABORT); + set_state(children, MILTER_SERVER_CONTEXT_STATE_ABORT); for (child = priv->milters; child; child = g_list_next(child)) { MilterServerContext *context = MILTER_SERVER_CONTEXT(child->data); - g_queue_push_tail(priv->reply_queue, context); if (milter_server_context_abort(context)) success = TRUE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |