David  11 Dec 2012
     - Win process control (affects API and wrapper):
         Since Win doesn't have an API for process suspend/resume,
         we were suspending processes by
             1) enumerating all the threads in the system
             (typically several thousand)
             2) suspending those belonging to the given process
         The problem: for each thread, the code was calling a function
         in diagnostics_win.cpp to see if the thread
         was exempted from suspension.
         This check (which is unnecessary anyway if we're
         suspending another process)
         was surrounded by a semaphore acquire/release.
         The result: performance problems.
         It could take a minute to suspend the threads.
         Solution:
             1) do the check for exemption only if we're suspending threads
                 in our own process (i.e. from the API)
             2) if we're suspending multiple processes, enumerate the threads
                 only once, and see if each one belongs to any of the processes
             3) have the wrapper elevate itself to normal priority.
                 Otherwise it can get preempted for long periods,
                 sometimes in the middle of scanning the threads.
         Note: post-9x versions of Win have a process group API
         that includes suspend/resume.
         We'll switch to this soon.

     api/
         boinc_api.cpp
     client/
         gpu_detect.cpp
     lib/
         proc_control.cpp,h
         procinfo.cpp
         util.h
     samples/wrapper/
         wrapper.cpp
_______________________________________________
boinc_dev mailing list
[email protected]
http://lists.ssl.berkeley.edu/mailman/listinfo/boinc_dev
To unsubscribe, visit the above URL and
(near bottom of page) enter your email address.

Reply via email to