Skip to content

Commit b68110a

Browse files
authored
Merge pull request #547 from lf-lang/maxwait
Improve support for maxwait and tweak scheduling of physical actions
2 parents 7e80c35 + c0fdb2d commit b68110a

3 files changed

Lines changed: 26 additions & 4 deletions

File tree

core/reactor_common.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,13 @@ interval_t lf_get_stp_offset() { return lf_fed_STA_offset; }
190190

191191
interval_t lf_get_sta() { return lf_fed_STA_offset; }
192192

193+
interval_t lf_get_fed_maxwait() { return lf_fed_STA_offset; }
194+
193195
void lf_set_stp_offset(interval_t offset) { lf_set_sta(offset); }
194196

195-
void lf_set_sta(interval_t offset) { lf_fed_STA_offset = offset; }
197+
void lf_set_sta(interval_t offset) { lf_set_fed_maxwait(offset); }
198+
199+
void lf_set_fed_maxwait(interval_t offset) { lf_fed_STA_offset = offset; }
196200

197201
#endif // FEDERATED_DECENTRALIZED
198202

include/core/reactor.h

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,31 +62,45 @@ void lf_set_stop_tag(environment_t* env, tag_t tag);
6262

6363
/**
6464
* @brief Return the global STP offset on advancement of logical time for federated execution.
65-
* @deprecated Use lf_get_sta() instead.
65+
* @deprecated Use lf_get_fed_maxwait() instead.
6666
*/
6767
interval_t lf_get_stp_offset(void);
6868

6969
/**
7070
* @brief Return the global STA (safe to advance) offset for federated execution.
7171
* @ingroup Federated
72+
* @deprecated Use lf_get_fed_maxwait() instead.
7273
*/
7374
interval_t lf_get_sta(void);
7475

76+
/**
77+
* @brief Return the global maxwait for the current federate.
78+
* @ingroup Federated
79+
*/
80+
interval_t lf_get_fed_maxwait(void);
81+
7582
/**
7683
* @brief Set the global STP offset on advancement of logical time for federated execution.
7784
* @param offset A non-negative time value to be applied as the STP offset.
78-
* @deprecated Use lf_set_sta() instead.
85+
* @deprecated Use lf_set_fed_maxwait() instead.
7986
*/
8087
void lf_set_stp_offset(interval_t offset);
8188

8289
/**
8390
* @brief Set the global STA (safe to advance) offset for federated execution.
8491
* @ingroup Federated
85-
*
8692
* @param offset A non-negative time value to be applied as the STA offset.
93+
* @deprecated Use lf_set_fed_maxwait() instead.
8794
*/
8895
void lf_set_sta(interval_t offset);
8996

97+
/**
98+
* @brief Set the global maxwait for the current federate.
99+
* @ingroup Federated
100+
* @param offset A non-negative time value to be applied as the maxwait.
101+
*/
102+
void lf_set_fed_maxwait(interval_t offset);
103+
90104
#endif // FEDERATED_DECENTRALIZED
91105

92106
/**

lib/schedule.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,10 @@ trigger_handle_t lf_schedule_trigger(environment_t* env, trigger_t* trigger, int
160160
if (trigger->is_physical) {
161161
// Get the current physical time and assign it as the intended time.
162162
intended_tag.time = lf_time_physical() + delay;
163+
if (intended_tag.time < env->start_tag.time) {
164+
// A physical action should never be assigned a time earlier than the start time.
165+
intended_tag.time = env->start_tag.time;
166+
}
163167
intended_tag.microstep = 0;
164168
} else {
165169
// FIXME: We need to verify that we are executing within a reaction?

0 commit comments

Comments
 (0)