ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/src/libstatgrab/process_stats.c
(Generate patch)

Comparing projects/libstatgrab/src/libstatgrab/process_stats.c (file contents):
Revision 1.35 by tdb, Sun Apr 4 15:56:53 2004 UTC vs.
Revision 1.36 by tdb, Sun Apr 4 16:12:59 2004 UTC

# Line 207 | Line 207 | int get_proc_snapshot(proc_state_t **ps){
207   #endif
208  
209   #ifdef ALLBSD
210 +        mib[0] = CTL_KERN;
211 +        mib[1] = KERN_PROC;
212 +        mib[2] = KERN_PROC_ALL;
213  
214 < #if defined(NETBSD) || defined(OPENBSD)
215 <        kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, NULL);
216 < #else
214 <        kvmd = kvm_openfiles(_PATH_DEVNULL, _PATH_DEVNULL, NULL, O_RDONLY, NULL);
215 < #endif
214 >        if(sysctl(mib, 3, NULL, &size, NULL, 0) < 0) {
215 >                return NULL;
216 >        }
217  
218 <        if(kvmd == NULL) return NULL;
218 >        procs = size / sizeof(struct kinfo_proc);
219  
220 <        kp_stats = kvm_getprocs(kvmd, KERN_PROC_ALL, 0, &procs);
220 >        kp_stats = malloc(size);
221 >        if(kp_stats == NULL) {
222 >                return NULL;
223 >        }
224  
225 <        if (kp_stats == NULL || procs < 0) {
225 >        if(sysctl(mib, 3, kp_stats, &size, NULL, 0) < 0) {
226 >                free(kp_stats);
227                  return NULL;
228          }
229  
230 + #if defined(NETBSD) || defined(OPENBSD)
231 +        kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, NULL);
232 + #else
233 +        kvmd = kvm_openfiles(_PATH_DEVNULL, _PATH_DEVNULL, NULL, O_RDONLY, NULL);
234 + #endif
235 +
236          for (i = 0; i < procs; i++) {
237                  /* replace with something more sensible */
238                  proc_state = realloc(proc_state,
# Line 266 | Line 277 | int get_proc_snapshot(proc_state_t **ps){
277                          proc_state_ptr->proctitle = proctitle;
278                  }
279                  else {
280 +                        /* Should probably be returning NULL here */
281                          proc_state_ptr->proctitle =
282                                  malloc(strlen(proc_state_ptr->process_name)+4);
283                          if(proc_state_ptr->proctitle == NULL) {
# Line 318 | Line 330 | int get_proc_snapshot(proc_state_t **ps){
330                  /* This is in pages */
331                  proc_state_ptr->proc_resident =
332                          kp_stats[i].kp_eproc.e_vm.vm_rssize * getpagesize();
321                /* This is in microseconds */
333   #if defined(NETBSD) || defined(OPENBSD)
334                  proc_state_ptr->time_spent =
335                          kp_stats[i].kp_proc.p_rtime.tv_sec;
# Line 328 | Line 339 | int get_proc_snapshot(proc_state_t **ps){
339                          kp_stats[i].kp_thread.td_sticks +
340                          kp_stats[i].kp_thread.td_iticks ) / 1000000;
341   #else
342 +                /* This is in microseconds */
343                  proc_state_ptr->time_spent =
344                          kp_stats[i].kp_proc.p_runtime / 1000000;
345   #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines