Skip to content

Commit

Permalink
Merge pull request #55719 from lawnjelly/rid_tracking_better_info
Browse files Browse the repository at this point in the history
  • Loading branch information
akien-mga authored Dec 8, 2021
2 parents ffbd595 + 7eae6cd commit 193b278
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
16 changes: 13 additions & 3 deletions core/rid_handle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,15 @@ String RID_Database::_rid_to_string(const RID &p_rid, const PoolElement &p_pe) {
s += "PE [ rev " + itos(p_pe.revision) + " ] ";
#ifdef RID_HANDLE_ALLOCATION_TRACKING_ENABLED
if (p_pe.filename) {
s += String(p_pe.filename) + " ";
s += String(p_pe.filename).get_file() + " ";
}
s += "line " + itos(p_pe.line_number);

if (p_pe.previous_filename) {
s += " ( prev ";
s += String(p_pe.previous_filename).get_file() + " ";
s += "line " + itos(p_pe.previous_line_number) + " )";
}
#endif
return s;
}
Expand Down Expand Up @@ -186,6 +192,11 @@ void RID_Database::handle_make_rid(RID &r_rid, RID_Data *p_data, RID_OwnerBase *
r_rid._revision = pe->revision;

#ifdef RID_HANDLE_ALLOCATION_TRACKING_ENABLED
// make a note of the previous allocation - this isn't super necessary
// but can pinpoint source allocations when dangling RIDs occur.
pe->previous_filename = pe->filename;
pe->previous_line_number = pe->line_number;

pe->line_number = 0;
pe->filename = nullptr;
#endif
Expand Down Expand Up @@ -230,8 +241,7 @@ RID_Data *RID_Database::handle_get_or_null(const RID &p_rid) {

const PoolElement &pe = _pool[p_rid._id];
if (pe.revision != p_rid._revision) {
print_verbose("RID revision incorrect : " + _rid_to_string(p_rid, pe));
ERR_FAIL_COND_V_MSG(pe.revision != p_rid._revision, nullptr, "RID_Database get_or_null, revision is incorrect, object possibly freed before use.");
ERR_FAIL_COND_V_MSG(pe.revision != p_rid._revision, nullptr, "RID get_or_null, revision is incorrect, possible dangling RID. " + _rid_to_string(p_rid, pe));
}

return pe.data;
Expand Down
5 changes: 5 additions & 0 deletions core/rid_handle.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,14 @@ class RID_Database {
RID_Data *data;
uint32_t revision;
#ifdef RID_HANDLE_ALLOCATION_TRACKING_ENABLED
// current allocation
uint16_t line_number;
uint16_t owner_name_id;
const char *filename;

// previous allocation (allows identifying dangling RID source allocations)
const char *previous_filename;
uint32_t previous_line_number;
#endif
};

Expand Down

0 comments on commit 193b278

Please sign in to comment.