Import sendmail 8.13.7
[dragonfly.git] / contrib / sendmail-8.13.7 / libmilter / handler.c
blob3acfc5fca379d2ecd85e2e8c67d2f851d35d2f4b
1 /*
2 * Copyright (c) 1999-2003 Sendmail, Inc. and its suppliers.
3 * All rights reserved.
5 * By using this file, you agree to the terms and conditions set
6 * forth in the LICENSE file which can be found at the top level of
7 * the sendmail distribution.
9 */
11 #include <sm/gen.h>
12 SM_RCSID("@(#)$Id: handler.c,v 8.36 2003/09/08 21:27:14 yuri Exp $")
14 #include "libmilter.h"
18 ** HANDLE_SESSION -- Handle a connected session in its own context
20 ** Parameters:
21 ** ctx -- context structure
23 ** Returns:
24 ** MI_SUCCESS/MI_FAILURE
27 int
28 mi_handle_session(ctx)
29 SMFICTX_PTR ctx;
31 int ret;
33 if (ctx == NULL)
34 return MI_FAILURE;
35 ctx->ctx_id = (sthread_t) sthread_get_id();
38 ** Detach so resources are free when the thread returns.
39 ** If we ever "wait" for threads, this call must be removed.
42 if (pthread_detach(ctx->ctx_id) != 0)
43 ret = MI_FAILURE;
44 else
45 ret = mi_engine(ctx);
46 if (ValidSocket(ctx->ctx_sd))
48 (void) closesocket(ctx->ctx_sd);
49 ctx->ctx_sd = INVALID_SOCKET;
51 if (ctx->ctx_reply != NULL)
53 free(ctx->ctx_reply);
54 ctx->ctx_reply = NULL;
56 if (ctx->ctx_privdata != NULL)
58 smi_log(SMI_LOG_WARN,
59 "%s: private data not NULL",
60 ctx->ctx_smfi->xxfi_name);
62 mi_clr_macros(ctx, 0);
63 free(ctx);
64 ctx = NULL;
65 return ret;