X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8b8ed0b4613ec347d86e68dee6024c8f11fbd056..c4c82977e0a105cdf7b04010ddd21bbf15dced4d:/src/sthread/ObjectAccess.cpp diff --git a/src/sthread/ObjectAccess.cpp b/src/sthread/ObjectAccess.cpp index 30c10f34ee..25e9b52c32 100644 --- a/src/sthread/ObjectAccess.cpp +++ b/src/sthread/ObjectAccess.cpp @@ -86,10 +86,21 @@ int sthread_access_begin(void* objaddr, const char* objname, const char* file, i auto* ownership = get_owner(objaddr); if (ownership->owner == self) { ownership->recursive_depth++; + return true; } else if (ownership->owner != nullptr) { auto msg = std::string("Unprotected concurent access to ") + objname + ": " + ownership->owner->get_name(); - if (not xbt_log_no_loc) + if (not xbt_log_no_loc) { msg += simgrid::xbt::string_printf(" at %s:%d", ownership->file, ownership->line); + if (ownership->recursive_depth > 1) { + msg += simgrid::xbt::string_printf(" (and %d other locations)", ownership->recursive_depth - 1); + if (ownership->recursive_depth != 2) + msg += "s"; + } + } else { + msg += simgrid::xbt::string_printf(" from %d location", ownership->recursive_depth); + if (ownership->recursive_depth != 1) + msg += "s"; + } msg += " vs " + self->get_name(); if (xbt_log_no_loc) msg += std::string(" (locations hidden because of --log=no_loc)."); @@ -120,8 +131,9 @@ void sthread_access_end(void* objaddr, const char* objname, const char* file, in [self, objaddr, objname]() -> void { XBT_INFO("%s releases %s", self->get_cname(), objname); auto* ownership = get_owner(objaddr); - xbt_assert(ownership->owner == self, "safety check failed: %s is not owner of the object it's releasing.", - self->get_cname()); + xbt_assert(ownership->owner == self, + "safety check failed: %s is not owner of the object it's releasing. That object owned by %s.", + self->get_cname(), (ownership->owner == nullptr ? "nobody" : ownership->owner->get_cname())); ownership->recursive_depth--; if (ownership->recursive_depth == 0) ownership->owner = nullptr;