xref: /freebsd/contrib/sendmail/libmilter/handler.c (revision e2c0e292e8a7ca00ba99bcfccc9e637f45c3e8b1)
106f25ae9SGregory Neil Shapiro /*
25dd76dd0SGregory Neil Shapiro  *  Copyright (c) 1999-2003, 2006 Proofpoint, Inc. and its suppliers.
306f25ae9SGregory Neil Shapiro  *	All rights reserved.
406f25ae9SGregory Neil Shapiro  *
506f25ae9SGregory Neil Shapiro  * By using this file, you agree to the terms and conditions set
606f25ae9SGregory Neil Shapiro  * forth in the LICENSE file which can be found at the top level of
706f25ae9SGregory Neil Shapiro  * the sendmail distribution.
806f25ae9SGregory Neil Shapiro  *
906f25ae9SGregory Neil Shapiro  */
1006f25ae9SGregory Neil Shapiro 
1140266059SGregory Neil Shapiro #include <sm/gen.h>
124313cc83SGregory Neil Shapiro SM_RCSID("@(#)$Id: handler.c,v 8.40 2013-11-22 20:51:36 ca Exp $")
1306f25ae9SGregory Neil Shapiro 
1406f25ae9SGregory Neil Shapiro #include "libmilter.h"
1506f25ae9SGregory Neil Shapiro 
16d0cef73dSGregory Neil Shapiro #if !_FFR_WORKERS_POOL
1706f25ae9SGregory Neil Shapiro /*
18da7d7b9cSGregory Neil Shapiro **  MI_HANDLE_SESSION -- Handle a connected session in its own context
1906f25ae9SGregory Neil Shapiro **
2006f25ae9SGregory Neil Shapiro **	Parameters:
2106f25ae9SGregory Neil Shapiro **		ctx -- context structure
2206f25ae9SGregory Neil Shapiro **
2306f25ae9SGregory Neil Shapiro **	Returns:
2406f25ae9SGregory Neil Shapiro **		MI_SUCCESS/MI_FAILURE
2506f25ae9SGregory Neil Shapiro */
2606f25ae9SGregory Neil Shapiro 
2706f25ae9SGregory Neil Shapiro int
2806f25ae9SGregory Neil Shapiro mi_handle_session(ctx)
2906f25ae9SGregory Neil Shapiro 	SMFICTX_PTR ctx;
3006f25ae9SGregory Neil Shapiro {
3106f25ae9SGregory Neil Shapiro 	int ret;
3206f25ae9SGregory Neil Shapiro 
3306f25ae9SGregory Neil Shapiro 	if (ctx == NULL)
3406f25ae9SGregory Neil Shapiro 		return MI_FAILURE;
3506f25ae9SGregory Neil Shapiro 	ctx->ctx_id = (sthread_t) sthread_get_id();
3606f25ae9SGregory Neil Shapiro 
3706f25ae9SGregory Neil Shapiro 	/*
38*5b0945b5SGregory Neil Shapiro 	**  Detach so resources are freed when the thread returns.
3913bd1963SGregory Neil Shapiro 	**  If we ever "wait" for threads, this call must be removed.
4006f25ae9SGregory Neil Shapiro 	*/
4194c01205SGregory Neil Shapiro 
4206f25ae9SGregory Neil Shapiro 	if (pthread_detach(ctx->ctx_id) != 0)
4394c01205SGregory Neil Shapiro 		ret = MI_FAILURE;
4494c01205SGregory Neil Shapiro 	else
4506f25ae9SGregory Neil Shapiro 		ret = mi_engine(ctx);
469bd497b8SGregory Neil Shapiro 	mi_clr_ctx(ctx);
4706f25ae9SGregory Neil Shapiro 	ctx = NULL;
4806f25ae9SGregory Neil Shapiro 	return ret;
4906f25ae9SGregory Neil Shapiro }
50d0cef73dSGregory Neil Shapiro #endif /* !_FFR_WORKERS_POOL */
51