- removed Scheduler-initiated events
git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@604 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
parent
8062dd95da
commit
da39407173
15 changed files with 21 additions and 55 deletions
|
@ -36,13 +36,10 @@ class Policy:
|
|||
#
|
||||
# Should be implemented with signature:
|
||||
# @code
|
||||
# def sort_queue(self, event, queue):
|
||||
# def sort_queue(self, queue):
|
||||
# # function body
|
||||
# @endcode
|
||||
#
|
||||
# @param event Enumeration value of type Scheduler::Event,
|
||||
# needed by some policies to know the reason of
|
||||
# the call
|
||||
# @param queue The sgpem::SchedulableQueue to be sorted.
|
||||
# Only some methods of it are implemented,
|
||||
# notably get_item_at(position),
|
||||
|
|
|
@ -19,9 +19,6 @@ class ScriptAdapter :
|
|||
## @var The policy this ScriptAdapter will use for calls
|
||||
_policy = None
|
||||
|
||||
## @var The event to pass to Policy.sort_queue() after the asynchronous call
|
||||
_event = None
|
||||
|
||||
## @var Synchronized return value you can read from C++
|
||||
# when a threaded function returns
|
||||
_ret_val = None
|
||||
|
@ -59,19 +56,16 @@ class ScriptAdapter :
|
|||
# singleton, via SWIG
|
||||
#
|
||||
# @param self The caller object
|
||||
# @param event The event to pass to sort_queue
|
||||
def async_sort_queue(self, event):
|
||||
self._event = event
|
||||
def async_sort_queue(self):
|
||||
self._g_mutex.lock(ScriptAdapter._wrap_sort_queue, self)
|
||||
|
||||
def _wrap_sort_queue(self):
|
||||
thread.start_new_thread(ScriptAdapter._wrap_sort_queue_callback,
|
||||
(self,self._event))
|
||||
thread.start_new_thread(ScriptAdapter._wrap_sort_queue_callback, (self,))
|
||||
|
||||
def _wrap_sort_queue_callback(self, event):
|
||||
def _wrap_sort_queue_callback(self):
|
||||
# here we retrieve and pass the ready queue
|
||||
queue = sgpem.Scheduler.get_instance().get_ready_queue()
|
||||
self._policy.sort_queue(event, queue)
|
||||
self._policy.sort_queue(queue)
|
||||
self._g_mutex.unlock()
|
||||
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ class fcfs(Policy) :
|
|||
def get_time_slice(self):
|
||||
return -2
|
||||
|
||||
def sort_queue(self, event, queue):
|
||||
def sort_queue(self, queue):
|
||||
cmpf = lambda a, b: \
|
||||
a.get_schedulable().get_arrival_time() < \
|
||||
b.get_schedulable().get_arrival_time()
|
||||
|
|
|
@ -35,7 +35,7 @@ class sjf(Policy) :
|
|||
def get_time_slice(self):
|
||||
return -1
|
||||
|
||||
def sort_queue(self, event, queue):
|
||||
def sort_queue(self, queue):
|
||||
cmpf = lambda a, b: \
|
||||
a.get_cpu_time_left() < \
|
||||
b.get_cpu_time_left()
|
||||
|
|
|
@ -98,19 +98,17 @@ PythonPolicy::configure() throw(UserInterruptException)
|
|||
|
||||
|
||||
void
|
||||
PythonPolicy::sort_queue(Scheduler::event event) const throw(UserInterruptException)
|
||||
PythonPolicy::sort_queue() const throw(UserInterruptException)
|
||||
{
|
||||
PyObject* pEvent = PyInt_FromLong(event);
|
||||
PyObject* pMethodName = PyString_FromString("async_sort_queue");
|
||||
PyObject* retval = PyObject_CallMethodObjArgs(_adapter, pMethodName, pEvent, NULL);
|
||||
PyObject* retval = PyObject_CallMethodObjArgs(_adapter, pMethodName, NULL, NULL);
|
||||
|
||||
// Do minimal debugging
|
||||
if(!retval) PyErr_Print();
|
||||
else Py_DECREF(retval);
|
||||
|
||||
Py_DECREF(pMethodName);
|
||||
Py_DECREF(pEvent);
|
||||
|
||||
|
||||
wait_unlock();
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ namespace sgpem
|
|||
/**
|
||||
Calls the method \c async_sort_queue
|
||||
*/
|
||||
void sort_queue(Scheduler::event) const throw(UserInterruptException);
|
||||
void sort_queue() const throw(UserInterruptException);
|
||||
|
||||
/**
|
||||
\returns A textual description of this policy.
|
||||
|
|
|
@ -16,5 +16,5 @@ class python_loader_configure(Policy) :
|
|||
def get_time_slice(self):
|
||||
return -1
|
||||
|
||||
def sort_queue(self, event, queue):
|
||||
def sort_queue(self, queue):
|
||||
pass
|
||||
|
|
|
@ -17,5 +17,5 @@ class python_loader_get_time_slice(Policy) :
|
|||
pass
|
||||
return -1
|
||||
|
||||
def sort_queue(self, event, queue):
|
||||
def sort_queue(self, queue):
|
||||
pass
|
||||
|
|
|
@ -17,5 +17,5 @@ class python_loader_is_preemptive(Policy) :
|
|||
def get_time_slice(self):
|
||||
return -1
|
||||
|
||||
def sort_queue(self, event, queue):
|
||||
def sort_queue(self, queue):
|
||||
pass
|
||||
|
|
|
@ -14,7 +14,7 @@ class python_loader_sort_queue(Policy) :
|
|||
def get_time_slice(self):
|
||||
return -1
|
||||
|
||||
def sort_queue(self, event, queue):
|
||||
def sort_queue(self, queue):
|
||||
print "[II] Entering willingly an endless loop."
|
||||
while True:
|
||||
pass
|
||||
|
|
|
@ -106,7 +106,7 @@ main(int argc, char** argv) {
|
|||
{
|
||||
SchedulableQueue sl;
|
||||
polman.test_init("python_loader_sort_queue");
|
||||
polman.get_policy().sort_queue(Scheduler::event_schedulable_arrival);
|
||||
polman.get_policy().sort_queue();
|
||||
}
|
||||
catch(UserInterruptException e)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue