Boolean Process::loadProcessInfo (int &pIndex) { int status; unsigned long maxprocount; __int64 qpid; char handle[100]; unsigned long jpictx2; /* The context for JPI calls */ item_list itmlst3[MAXITMLST]; int procCount; Boolean stat; /* If this is the first process request. Rebuild proc_table */ if (pIndex == 0) { /* Lock the mutex on proc_table */ pthread_mutex_lock(&proc_table_mutex); /* Free the old proc_table */ if (proc_table != NULL) { free(proc_table); proc_table = NULL; proc_table_count = 0; } /* Find the maximum process that could run on the system */ if ((maxprocount = getmaxprocount ()) == 0) { /* Un lock the mutex on proc_table */ pthread_mutex_unlock(&proc_table_mutex); /* Return false */ return false; } /* Allocate memory to proc_table */ proc_table = (proc_info_t) calloc (maxprocount + 1, sizeof (struct proc_info)); /* Error in allocating Memory. return false */ if (NULL == proc_table) { /* Un lock the mutex on proc_table */ pthread_mutex_unlock(&proc_table_mutex); return false; } jpictx2 = 0; procCount = 0; itmlst3[0].wlength = 0; itmlst3[0].wcode = PSCAN$_MODE; itmlst3[0].pbuffer = (void *) JPI$K_OTHER; itmlst3[0].pretlen = NULL; itmlst3[1].wlength = 0; itmlst3[1].wcode = 0; itmlst3[1].pbuffer = NULL; itmlst3[1].pretlen = NULL; status = sys$process_scan (&jpictx2, itmlst3); if (!$VMS_STATUS_SUCCESS (status)) { /* Free the proc_table */ free (proc_table); proc_table = NULL; proc_table_count = 0; /* Un lock the mutex on proc_table */ pthread_mutex_unlock(&proc_table_mutex); /* Return failure */ return false; } stat = buildProcessTable(jpictx2, procCount, itmlst3, proc_table); proc_table_count += procCount; jpictx2 = 0; procCount = 0; itmlst3[0].wlength = 0; itmlst3[0].wcode = PSCAN$_MODE; itmlst3[0].pbuffer = (void *) JPI$K_BATCH; itmlst3[0].pretlen = NULL; itmlst3[1].wlength = 0; itmlst3[1].wcode = 0; itmlst3[1].pbuffer = NULL; itmlst3[1].pretlen = NULL; status = sys$process_scan (&jpictx2, itmlst3); if (!$VMS_STATUS_SUCCESS (status)) { /* Free the proc_table */ free (proc_table); proc_table = NULL; proc_table_count = 0; /* Un lock the mutex on proc_table */ pthread_mutex_unlock(&proc_table_mutex); /* Return failure */ return false; } stat = buildProcessTable(jpictx2, procCount, itmlst3, &proc_table[proc_table_count]); proc_table_count += procCount; jpictx2 = 0; procCount = 0; itmlst3[0].wlength = 0; itmlst3[0].wcode = PSCAN$_MODE; itmlst3[0].pbuffer = (void *) JPI$K_NETWORK; itmlst3[0].pretlen = NULL; itmlst3[1].wlength = 0; itmlst3[1].wcode = 0; itmlst3[1].pbuffer = NULL; itmlst3[1].pretlen = NULL; status = sys$process_scan (&jpictx2, itmlst3); if (!$VMS_STATUS_SUCCESS (status)) { /* Free the proc_table */ free (proc_table); proc_table = NULL; proc_table_count = 0; /* Un lock the mutex on proc_table */ pthread_mutex_unlock(&proc_table_mutex); /* Return failure */ return false; } stat = buildProcessTable(jpictx2, procCount, itmlst3, &proc_table[proc_table_count]); proc_table_count += procCount; jpictx2 = 0; itmlst3[0].wlength = 0; itmlst3[0].wcode = PSCAN$_MODE; itmlst3[0].pbuffer = (void *) JPI$K_INTERACTIVE; itmlst3[0].pretlen = NULL; itmlst3[1].wlength = 0; itmlst3[1].wcode = 0; itmlst3[1].pbuffer = NULL; itmlst3[1].pretlen = NULL; status = sys$process_scan (&jpictx2, itmlst3); if (!$VMS_STATUS_SUCCESS (status)) { /* Free the proc_table */ free (proc_table); proc_table = NULL; proc_table_count = 0; /* Un lock the mutex on proc_table */ pthread_mutex_unlock(&proc_table_mutex); /* Return failure */ return false; } stat = buildProcessTable(jpictx2, procCount, itmlst3, &proc_table[proc_table_count]); proc_table_count += procCount; /* Un lock the mutex on proc_table */ pthread_mutex_unlock(&proc_table_mutex); } /* End if (pIndex == 0), rebuild of proc_table */ return getProcessInfo(pIndex); }
Boolean Process::loadProcessInfo (int &pIndex) { int status; unsigned long maxprocount; __int64 qpid; char handle[100]; Boolean stat; if ((maxprocount = getmaxprocount ()) == 0) { return false; } if (pIndex == 0) { if (proc_table != NULL) { free (proc_table); } proc_table = (proc_info_t) calloc (maxprocount + 1, sizeof (struct proc_info)); pInfo = pData = proc_table; jpictx2 = 0; procCount = 0; ii = 1; itmlst3[0].wlength = 0; itmlst3[0].wcode = PSCAN$_MODE; itmlst3[0].pbuffer = (void *) JPI$K_OTHER; itmlst3[0].pretlen = NULL; itmlst3[1].wlength = 0; itmlst3[1].wcode = 0; itmlst3[1].pbuffer = NULL; itmlst3[1].pretlen = NULL; status = sys$process_scan (&jpictx2, itmlst3); if (!$VMS_STATUS_SUCCESS (status)) { return status; } stat = buildProcessTable(); jpictx2 = 0; itmlst3[0].wlength = 0; itmlst3[0].wcode = PSCAN$_MODE; itmlst3[0].pbuffer = (void *) JPI$K_BATCH; itmlst3[0].pretlen = NULL; itmlst3[1].wlength = 0; itmlst3[1].wcode = 0; itmlst3[1].pbuffer = NULL; itmlst3[1].pretlen = NULL; status = sys$process_scan (&jpictx2, itmlst3); if (!$VMS_STATUS_SUCCESS (status)) { return status; } stat = buildProcessTable(); jpictx2 = 0; itmlst3[0].wlength = 0; itmlst3[0].wcode = PSCAN$_MODE; itmlst3[0].pbuffer = (void *) JPI$K_NETWORK; itmlst3[0].pretlen = NULL; itmlst3[1].wlength = 0; itmlst3[1].wcode = 0; itmlst3[1].pbuffer = NULL; itmlst3[1].pretlen = NULL; status = sys$process_scan (&jpictx2, itmlst3); if (!$VMS_STATUS_SUCCESS (status)) { return status; } stat = buildProcessTable(); jpictx2 = 0; itmlst3[0].wlength = 0; itmlst3[0].wcode = PSCAN$_MODE; itmlst3[0].pbuffer = (void *) JPI$K_INTERACTIVE; itmlst3[0].pretlen = NULL; itmlst3[1].wlength = 0; itmlst3[1].wcode = 0; itmlst3[1].pbuffer = NULL; itmlst3[1].pretlen = NULL; status = sys$process_scan (&jpictx2, itmlst3); if (!$VMS_STATUS_SUCCESS (status)) { return status; } stat = buildProcessTable(); pInfo = pData; } else { if (ii < procCount) { pInfo++; ii++; } else { return false; } } if (procCount > 0) { return true; } else { return false; } }