- Poll more often to make "jump_to()" faster. Also increase

time given to a policy before judging it dead to ~5 seconds.


git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@1076 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
tchernobog 2006-09-09 12:30:49 +00:00
parent c6612d4ad4
commit eec74de632
1 changed files with 7 additions and 5 deletions

View File

@ -18,6 +18,8 @@
// along with SGPEMv2; if not, write to the Free Software // along with SGPEMv2; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "config.h"
#include "python_cpu_policy.hh" #include "python_cpu_policy.hh"
#include <limits> #include <limits>
@ -27,9 +29,6 @@
using namespace sgpem; using namespace sgpem;
using namespace std; using namespace std;
#define WAIT_FOR (250000)
// Static member data // Static member data
Glib::StaticRecMutex PythonCPUPolicy::_mtx = GLIBMM_STATIC_REC_MUTEX_INIT; Glib::StaticRecMutex PythonCPUPolicy::_mtx = GLIBMM_STATIC_REC_MUTEX_INIT;
@ -225,6 +224,9 @@ PythonCPUPolicy::get_time_slice() const throw(UserInterruptException, MalformedP
void void
PythonCPUPolicy::wait_unlock() const throw(UserInterruptException, MalformedPolicyException) PythonCPUPolicy::wait_unlock() const throw(UserInterruptException, MalformedPolicyException)
{ {
// Polling time
static const int wait_for = 150000;
PyThreadState* _save; PyThreadState* _save;
int i = 0; // We give the sort_queue() three seconds max time, then... int i = 0; // We give the sort_queue() three seconds max time, then...
// we shot it stone dead! Bang. // we shot it stone dead! Bang.
@ -233,7 +235,7 @@ PythonCPUPolicy::wait_unlock() const throw(UserInterruptException, MalformedPoli
do do
{ {
Py_UNBLOCK_THREADS; Py_UNBLOCK_THREADS;
usleep(WAIT_FOR); // hack'a'ton! magggggiccc nummmbeeerrrrrs!! usleep(wait_for); // hack'a'ton! magggggiccc nummmbeeerrrrrs!!
Py_BLOCK_THREADS; Py_BLOCK_THREADS;
PyObject* retval = PyObject_CallMethod(_adapter, "mutex_test_lock", NULL); PyObject* retval = PyObject_CallMethod(_adapter, "mutex_test_lock", NULL);
@ -241,7 +243,7 @@ PythonCPUPolicy::wait_unlock() const throw(UserInterruptException, MalformedPoli
still_locked = PyObject_IsTrue(retval); still_locked = PyObject_IsTrue(retval);
Py_DECREF(retval); Py_DECREF(retval);
if (i++ > 12) /* waits for WAIT_FOR * 12 microseconds == 3 secs */ if (i++ > (1000000 / wait_for) * 5) /* waits for ~5 seconds */
{ {
PyThreadState_Clear(_save); PyThreadState_Clear(_save);
// As the API documentation says, the caller of PyEval_RestoreThread // As the API documentation says, the caller of PyEval_RestoreThread