/* ******************************************************************************* * Copyright (c) 1996 Martin Poole * ******************************************************************************* ** ** WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! ** ** Any changes to be made to this file should first be checked with ** mplib1 source control for library integrity. ** ** mplib1 source control can be reached at mplib1@quatermass.co.uk ** * * $Source: /home/cvs/cvsroot/onelan/onelan/src/mplib1/libsrc/bpo_val_proc.c,v $ * $Author: mpoole $ * $Date: 2002/10/07 09:37:37 $ * $Revision: 1.2 $ * ******************************************************************************* * * Change History * * $Log: bpo_val_proc.c,v $ * Revision 1.2 2002/10/07 09:37:37 mpoole * Initial checkin of mplib1-3.1.0 * * Revision 1.1 2002/10/07 09:36:54 mpoole * Initial checkin of mplib1-3.1.0 * * ******************************************************************************* */ #ident "$Header: /home/cvs/cvsroot/onelan/onelan/src/mplib1/libsrc/bpo_val_proc.c,v 1.2 2002/10/07 09:37:37 mpoole Exp $" /* ------------------------------------------------------------------ Include files ------------------------------------------------------------------ */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "include/bpo_proc_internal.h" #include /* ------------------------------------------------------------------ defines ------------------------------------------------------------------ */ struct procwalk { int which_procs; int (*isp_disp)( struct shm_process_private *shmpp, void *param1 ); struct shm_proc_list *w_splp; struct cache_proc_list *w_cpl; void *f_param1; }; /* ------------------------------------------------------------------ Code starts here ------------------------------------------------------------------ */ static void shm_check_proc( struct shm_process_private *sppp, struct procwalk *pw ) { int rv = SHM_LEAVE_PROC; switch(pw->which_procs) { case SHM_CHECK_ALL_PROCESSES : rv = (* pw->isp_disp)( sppp, pw->f_param1 ); break; case SHM_CHECK_DEAD_PROCESSES : if (is_pid_dead( sppp->pid ) != 0) { rv = (* pw->isp_disp)( sppp, pw->f_param1 ); } break; default : /* huh? */ break; } if (rv == SHM_DELETE_PROC) { Remove_Shm_Process( pw->w_splp, sppp->pid_str ); } return; } int Validate_Processes( const void * hint, int p_which_procs, Validate_Processes_t disp, void *param1 ) { /* OK, so walk the process list and call the routine for each process that is dead */ struct shm_proc_list *splp; struct shm_process_private *sppp; struct cache_proc_list *cpl; struct procwalk myprocwalk; int rv=0; /* init_pid_stuff();*/ /* First we need to ensure that the process list resource exists */ splp = Find_Proc_List( hint ); if ( splp == NULL ) return(0); cpl = Get_Cache_Procs( splp ); if (cpl==NULL) return(0); myprocwalk.which_procs = p_which_procs; myprocwalk.w_splp = splp; myprocwalk.w_cpl = cpl; myprocwalk.isp_disp = disp; myprocwalk.f_param1 = param1; if (p_which_procs == SHM_CHECK_THIS_PROCESS ) { sppp = bpo_Find_Item_By_Name( &splp->proc_List, param1 ); if (sppp) { if (disp) rv = (* disp)( sppp, param1 ); else rv = 1; } else rv = -1; }else { dl_Walk_List( &cpl->proc_list, (dl_Walk_List_t)shm_check_proc, &myprocwalk ); } return(rv); } /* -- End of File -- */