Skip to content

Commit

Permalink
Added in a gaurd to protect against calling processSignal within an i…
Browse files Browse the repository at this point in the history
…nterrupt handler.
  • Loading branch information
ashgti committed Apr 1, 2011
1 parent 21b58fc commit 9db84aa
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/ardulator.h
Expand Up @@ -52,6 +52,7 @@ class Ardulator {
std::string _registered_identifers;
ardu_clock_t _timer;
ardu_clock_t _scenario_length;
bool _inside_interrupt_handler;

void updatePinState();
void updatePinMaps();
Expand Down
10 changes: 10 additions & 0 deletions src/ardulator.cc
Expand Up @@ -53,6 +53,7 @@ Ardulator::Ardulator() : _interrupts(false) {
_scenario_length._seconds = 0;
_scenario_length._ticks = 0;
_registered_identifers = "";
_inside_interrupt_handler = false;
}

Ardulator::~Ardulator() {
Expand Down Expand Up @@ -184,6 +185,7 @@ Ardulator::updatePinState() {
// Report Changes in State
map<int, Signal*>::iterator it;
int c = 0;
_inside_interrupt_handler = true;
for (it = _signals.begin(); it != _signals.end(); it++) {
c++;
// cout << "Updating " << it->first << endl;
Expand All @@ -194,6 +196,8 @@ Ardulator::updatePinState() {
for (vit = _unused_signals.begin(); vit != _unused_signals.end(); vit++) {
(*vit)->setState(_timer);
}

_inside_interrupt_handler = false;
}

void
Expand Down Expand Up @@ -245,6 +249,12 @@ Ardulator::setPin(uint8_t pin_id, uint8_t val) {

void
Ardulator::dispatchSignal(const char *signal_id) {
if (_inside_interrupt_handler) {
cout << "Error, processingSignal " << signal_id << " while within an interrupt"
<< " handler is not allowed." << endl;
exit(12);
}

if (_mapping.find(signal_id) == _mapping.end()) {
return;
}
Expand Down

0 comments on commit 9db84aa

Please sign in to comment.