fix INCREMENTAL_COPY

delay P until Q has copied trailed bindings (should not be needed, but hey!)
don't trust TR when copying bindings.
This commit is contained in:
vsc 2010-02-03 22:52:45 +00:00
parent 976ae73266
commit 9c100ae09d
1 changed files with 12 additions and 9 deletions

View File

@ -41,15 +41,8 @@ static void share_private_nodes(int worker_q);
** Local macros **
** ---------------------- */
#if FULL_COPY
#define COMPUTE_SEGMENTS_TO_COPY_TO(Q) \
REMOTE_start_global_copy(Q) = (CELL) (H0); \
REMOTE_end_global_copy(Q) = (CELL) (H); \
REMOTE_start_local_copy(Q) = (CELL) (B); \
REMOTE_end_local_copy(Q) = (CELL) (LCL0); \
REMOTE_start_trail_copy(Q) = (CELL) (Yap_TrailBase); \
REMOTE_end_trail_copy(Q) = (CELL) (TR)
#else
#define INCREMENTAL_COPY 1
#if INCREMENTAL_COPY
#define COMPUTE_SEGMENTS_TO_COPY_TO(Q) \
REMOTE_start_global_copy(Q) = (CELL) (REMOTE_top_cp(Q)->cp_h); \
REMOTE_end_global_copy(Q) = (CELL) (B->cp_h); \
@ -57,6 +50,14 @@ static void share_private_nodes(int worker_q);
REMOTE_end_local_copy(Q) = (CELL) (REMOTE_top_cp(Q)); \
REMOTE_start_trail_copy(Q) = (CELL) (REMOTE_top_cp(Q)->cp_tr); \
REMOTE_end_trail_copy(Q) = (CELL) (TR)
#else
#define COMPUTE_SEGMENTS_TO_COPY_TO(Q) \
REMOTE_start_global_copy(Q) = (CELL) (H0); \
REMOTE_end_global_copy(Q) = (CELL) (H); \
REMOTE_start_local_copy(Q) = (CELL) (B); \
REMOTE_end_local_copy(Q) = (CELL) (LCL0); \
REMOTE_start_trail_copy(Q) = (CELL) (Yap_TrailBase); \
REMOTE_end_trail_copy(Q) = (CELL) (TR)
#endif
#define P_COPY_GLOBAL_TO(Q) \
@ -182,6 +183,7 @@ int p_share_work(void) {
sync_with_q:
REMOTE_reply_signal(worker_q) = copy_done;
while (LOCAL_reply_signal == sharing);
while (REMOTE_reply_signal(worker_q) != worker_ready);
LOCAL_share_request = MAX_WORKERS;
PUT_IN_REQUESTABLE(worker_id);
@ -315,6 +317,7 @@ sync_with_p:
#if INCREMENTAL_COPY
/* install fase --> TR and LOCAL_top_cp->cp_tr are equal */
aux_tr = ((choiceptr) LOCAL_start_local_copy)->cp_tr;
TR = ((choiceptr) LOCAL_start_end_copy)->cp_tr;
Yap_NEW_MAHASH((ma_h_inner_struct *)H);
while (TR != aux_tr) {
aux_cell = TrailTerm(--aux_tr);