Skip to content

Commit fcf8e78

Browse files
committed
Update internal device timestamp before processing both incoming and outgoing maps.
1 parent 5392031 commit fcf8e78

4 files changed

Lines changed: 12 additions & 13 deletions

File tree

src/device.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ struct _mpr_local_dev {
9292

9393
/* prototypes */
9494
static int check_registration(mpr_local_dev dev);
95+
static void process_maps(mpr_local_dev dev);
9596

9697
size_t mpr_dev_get_struct_size(int is_local)
9798
{
@@ -245,7 +246,7 @@ void mpr_dev_free(mpr_dev dev)
245246
free(sub);
246247
}
247248

248-
mpr_dev_process_maps(ldev);
249+
process_maps(ldev);
249250

250251
/* free signals owned by this device */
251252
list = mpr_dev_get_sigs(dev, MPR_DIR_ANY);
@@ -449,7 +450,7 @@ mpr_link mpr_dev_get_link_by_remote(mpr_dev dev, mpr_dev remote)
449450
return 0;
450451
}
451452

452-
void mpr_dev_process_maps(mpr_local_dev dev)
453+
static void process_maps(mpr_local_dev dev)
453454
{
454455
mpr_list list;
455456
mpr_graph graph;
@@ -620,19 +621,19 @@ void mpr_dev_set_time(mpr_dev dev, mpr_time time)
620621
mpr_time_set(&now, MPR_NOW);
621622
mpr_dev_set_offset(dev, mpr_time_get_diff(time, now), dev->clk_offset ? 0.1 : 1.0);
622623

624+
mpr_time_set(&ldev->time, time);
625+
ldev->time_is_stale = 0;
626+
623627
if (!ldev->locked) {
624628
/* process any updates made under the old timestamp */
625-
mpr_dev_process_maps(ldev);
629+
process_maps(ldev);
626630
}
627631

628-
mpr_time_set(&ldev->time, time);
629-
ldev->time_is_stale = 0;
630-
631632
if (ldev->timed && mpr_time_get_diff(ldev->t_next, time) <= 0.001) {
632633
ldev->updated = MPR_DIR_ANY;
633634
if (!ldev->locked) {
634635
/* process timed maps due under the new timestamp */
635-
mpr_dev_process_maps(ldev);
636+
process_maps(ldev);
636637
}
637638
}
638639
}

src/device.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,6 @@ int mpr_dev_GID_decref(mpr_local_dev dev, int group, mpr_id_map id_map);
7777

7878
void mpr_dev_init(mpr_dev dev, int is_local, const char *name, mpr_id id);
7979

80-
void mpr_dev_process_maps(mpr_local_dev dev);
81-
8280
void mpr_dev_update_subscribers(mpr_local_dev dev);
8381

8482
void mpr_dev_remove_sig(mpr_dev dev, mpr_sig sig);

src/expression/expr_evaluator.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ int mpr_expr_eval(mpr_expr expr, ebuffer buff, mpr_value *v_in, mpr_value *v_var
103103
mpr_value v_out, mpr_time *time, mpr_value v_next, int inst_idx)
104104
{
105105
#if TRACE_EVAL
106-
printf("evaluating expression with instance index %d\n", inst_idx);
106+
printf("evaluating expression with instance index %d at time %f\n",
107+
inst_idx, time ? mpr_time_as_dbl(*time) : -1);
107108
#endif
108109
estack stk = expr->stack;
109110
etoken_t *tok = stk->tokens, *end = tok + stk->num_tokens;

src/network.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,7 +1007,7 @@ MPR_INLINE static int mpr_min(int a, int b)
10071007
return a < b ? a : b;
10081008
}
10091009

1010-
int mpr_net_poll_internal(mpr_net net, int block_ms)
1010+
static int mpr_net_poll_internal(mpr_net net, int block_ms)
10111011
{
10121012
int i, count = 0, left_ms = 0, elapsed_ms, admin_elapsed_ms = 0;
10131013
double then;
@@ -1058,8 +1058,7 @@ int mpr_net_poll_internal(mpr_net net, int block_ms)
10581058
}
10591059
left_ms = 100;
10601060
for (i = 0; i < net->num_devs; i++) {
1061-
int dev_left_ms = mpr_local_dev_update_maps(net->devs[i]);
1062-
left_ms = mpr_min(left_ms, dev_left_ms);
1061+
left_ms = mpr_min(left_ms, mpr_local_dev_update_maps(net->devs[i]));
10631062

10641063
}
10651064

0 commit comments

Comments
 (0)