A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Bug fix inspired by Arnaud Guiersh's patch but that required one day of investigation...
[simgrid.git]
/
src
/
simix
/
smx_network.c
diff --git
a/src/simix/smx_network.c
b/src/simix/smx_network.c
index
d4c2bdb
..
b84c935
100644
(file)
--- a/
src/simix/smx_network.c
+++ b/
src/simix/smx_network.c
@@
-156,6
+156,8
@@
smx_comm_t SIMIX_communication_new(smx_comm_type_t type)
comm->type = type;
comm->sem = SIMIX_sem_init(0);
comm->refcount = 1;
comm->type = type;
comm->sem = SIMIX_sem_init(0);
comm->refcount = 1;
+ VERB2("Create communication %p; refcount initially %d", comm,
+ comm->refcount);
return comm;
}
return comm;
}
@@
-169,6
+171,11
@@
void SIMIX_communication_destroy(smx_comm_t comm)
VERB2("Destroy communication %p; refcount initially %d", comm,
comm->refcount);
VERB2("Destroy communication %p; refcount initially %d", comm,
comm->refcount);
+ if(!(comm->refcount>0)) {
+ INFO1("There is no more reference to this comm (%p). Cannot destroy!",comm);
+ xbt_die("Argh.!");
+ }
+
#ifdef HAVE_LATENCY_BOUND_TRACKING
//save is latency limited flag to use afterwards
if (latency_limited_dict == NULL) {
#ifdef HAVE_LATENCY_BOUND_TRACKING
//save is latency limited flag to use afterwards
if (latency_limited_dict == NULL) {
@@
-185,6
+192,8
@@
void SIMIX_communication_destroy(smx_comm_t comm)
comm->refcount--;
if (comm->refcount > 0)
return;
comm->refcount--;
if (comm->refcount > 0)
return;
+ VERB2("Really free communication %p; refcount is now %d", comm,
+ comm->refcount);
if (comm->sem) {
SIMIX_sem_destroy(comm->sem);
if (comm->sem) {
SIMIX_sem_destroy(comm->sem);
@@
-222,6
+231,9
@@
void SIMIX_communication_destroy(smx_comm_t comm)
static XBT_INLINE void SIMIX_communication_use(smx_comm_t comm)
{
comm->refcount++;
static XBT_INLINE void SIMIX_communication_use(smx_comm_t comm)
{
comm->refcount++;
+
+ VERB2("Use communication %p; refcount is now %d", comm,
+ comm->refcount);
}
/**
}
/**
@@
-555,14
+567,14
@@
XBT_INLINE void SIMIX_network_send(smx_rdv_t rdv, double task_size,
smx_comm_t * comm_ref, void *data)
{
xbt_ex_t e;
smx_comm_t * comm_ref, void *data)
{
xbt_ex_t e;
- *comm_ref =
- SIMIX_network_isend(rdv, task_size, rate, src_buff, src_buff_size,
- data);
+
smx_comm_t comm =
*comm_ref =
+
SIMIX_network_isend(rdv, task_size, rate, src_buff, src_buff_size,
+
data);
TRY {
TRY {
- SIMIX_network_wait(
*comm_ref
, timeout);
+ SIMIX_network_wait(
comm
, timeout);
}
TRY_CLEANUP {
}
TRY_CLEANUP {
- SIMIX_communication_destroy(
*comm_ref
);
+ SIMIX_communication_destroy(
comm
);
}
CATCH(e) {
RETHROW;
}
CATCH(e) {
RETHROW;
@@
-587,13
+599,13
@@
XBT_INLINE void SIMIX_network_recv(smx_rdv_t rdv, double timeout,
smx_comm_t * comm_ref)
{
xbt_ex_t e;
smx_comm_t * comm_ref)
{
xbt_ex_t e;
- *comm_ref =
+
smx_comm_t comm =
*comm_ref =
(smx_comm_t) SIMIX_network_irecv(rdv, dst_buff, dst_buff_size);
TRY {
(smx_comm_t) SIMIX_network_irecv(rdv, dst_buff, dst_buff_size);
TRY {
- SIMIX_network_wait(
*comm_ref
, timeout);
+ SIMIX_network_wait(
comm
, timeout);
}
TRY_CLEANUP {
}
TRY_CLEANUP {
- SIMIX_communication_destroy(
*comm_ref
);
+ SIMIX_communication_destroy(
comm
);
}
CATCH(e) {
RETHROW;
}
CATCH(e) {
RETHROW;