- Fix bunch of nasty bugs into ConcreteHistory
git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@1241 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
parent
a61b21d94b
commit
f3e7ee0393
|
@ -397,7 +397,11 @@ ConcreteHistory::add_thread(const Glib::ustring& name,
|
||||||
time_t arrival_time,
|
time_t arrival_time,
|
||||||
prio_t base_priority)
|
prio_t base_priority)
|
||||||
{
|
{
|
||||||
DynamicProcess& parent_process = down_cast<DynamicProcess&>(parent);
|
ConcreteEnvironment::Processes& processes = _snapshots.front()->get_processes();
|
||||||
|
Process* p = deep_find<Process>(processes, parent);
|
||||||
|
if(!p) throw std::runtime_error(_("History::add_thread() : Parent process not part of this History"));
|
||||||
|
|
||||||
|
DynamicProcess& parent_process = down_cast<DynamicProcess&>(*p);
|
||||||
StaticProcess& parent_core = parent_process.get_core();
|
StaticProcess& parent_core = parent_process.get_core();
|
||||||
StaticThread* core = new StaticThread(name, parent_core, cpu_time, arrival_time, base_priority);
|
StaticThread* core = new StaticThread(name, parent_core, cpu_time, arrival_time, base_priority);
|
||||||
DynamicThread* thread = new DynamicThread(core, &parent_process);
|
DynamicThread* thread = new DynamicThread(core, &parent_process);
|
||||||
|
@ -428,14 +432,19 @@ DynamicRequest&
|
||||||
ConcreteHistory::add_request(Thread& owner,
|
ConcreteHistory::add_request(Thread& owner,
|
||||||
time_t instant)
|
time_t instant)
|
||||||
{
|
{
|
||||||
DynamicThread& dyn_owner = down_cast<DynamicThread&>(owner);
|
ConcreteEnvironment::Processes& processes = _snapshots.front()->get_processes();
|
||||||
|
|
||||||
|
Process* p = deep_find(processes, owner.get_process());
|
||||||
|
if(!p) throw std::runtime_error(_("History::add_request() : Parent process not part of this History"));
|
||||||
|
Thread* t = deep_find(p->get_threads(), owner);
|
||||||
|
if(!t) throw std::runtime_error(_("History::add_request() : Parent thread not part of this History"));
|
||||||
|
|
||||||
|
DynamicThread& dyn_owner = down_cast<DynamicThread&>(*t);
|
||||||
StaticThread& owner_core = dyn_owner.get_core();
|
StaticThread& owner_core = dyn_owner.get_core();
|
||||||
|
|
||||||
StaticRequest* core = new StaticRequest(&owner_core, instant);
|
StaticRequest* core = new StaticRequest(&owner_core, instant);
|
||||||
DynamicRequest* req = new DynamicRequest(core, &dyn_owner);
|
DynamicRequest* req = new DynamicRequest(core, &dyn_owner);
|
||||||
|
|
||||||
dyn_owner.get_requests().push_back(req);
|
|
||||||
|
|
||||||
reset();
|
reset();
|
||||||
|
|
||||||
return *req;
|
return *req;
|
||||||
|
@ -458,13 +467,20 @@ ConcreteHistory::add_subrequest(Request& request,
|
||||||
resource_key_t resource_key,
|
resource_key_t resource_key,
|
||||||
time_t duration)
|
time_t duration)
|
||||||
{
|
{
|
||||||
DynamicRequest& dyn_request = down_cast<DynamicRequest&>(request);
|
ConcreteEnvironment::Processes& processes = _snapshots.front()->get_processes();
|
||||||
|
|
||||||
|
Process* p = deep_find(processes, request.get_thread().get_process());
|
||||||
|
if(!p) throw std::runtime_error(_("History::add_subrequest() : Parent process not part of this History"));
|
||||||
|
Thread* t = deep_find(p->get_threads(), request.get_thread());
|
||||||
|
if(!t) throw std::runtime_error(_("History::add_subrequest() : Parent thread not part of this History"));
|
||||||
|
Request* r = deep_find(t->get_requests(), request);
|
||||||
|
if(!r) throw std::runtime_error(_("History::add_subrequest() : Parent request not part of this History"));
|
||||||
|
|
||||||
|
DynamicRequest& dyn_request = down_cast<DynamicRequest&>(*r);
|
||||||
|
|
||||||
StaticSubRequest* core = new StaticSubRequest(resource_key, duration);
|
StaticSubRequest* core = new StaticSubRequest(resource_key, duration);
|
||||||
DynamicSubRequest* subreq = new DynamicSubRequest(core, &dyn_request);
|
DynamicSubRequest* subreq = new DynamicSubRequest(core, &dyn_request);
|
||||||
|
|
||||||
dyn_request.get_subrequests().push_back(subreq);
|
|
||||||
|
|
||||||
reset();
|
reset();
|
||||||
|
|
||||||
return *subreq;
|
return *subreq;
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
|
|
||||||
#include <sgpemv2/schedulable.hh>
|
#include <sgpemv2/schedulable.hh>
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
using namespace sgpem;
|
using namespace sgpem;
|
||||||
|
|
||||||
Schedulable::~Schedulable()
|
Schedulable::~Schedulable()
|
||||||
|
|
Loading…
Reference in New Issue