Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7412c8c authored by Steven Moreland's avatar Steven Moreland
Browse files

libutils: RefBase DEBUG_REF love

Done here:
- path saved to a useable location on host
- path always printed (for visibility for new users)
- open(.., 666) - That's '01204' not '0644' oops

Future considerations:
- make defines constexpr instead of ifdef
- copy malloc hook design to avoid needing to recompile code
- make libutilscallstack default on host
- run libutils tests, not just test compile debug mode
- code incorrectly prints ref 'doesn't exist'
  seems it's gotten out of sync, but still good enough
  to use stacktraces

Bug: 244325464
Test: manual
Change-Id: I732e5b8aec3cd946ef3559a2a814caf693846cc0
parent 377adea8
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -49,7 +49,11 @@

// folder where stack traces are saved when DEBUG_REFS is enabled
// this folder needs to exist and be writable
#ifdef __ANDROID__
#define DEBUG_REFS_CALLSTACK_PATH "/data/debug"
#else
#define DEBUG_REFS_CALLSTACK_PATH "."
#endif

// log all reference counting operations
#define PRINT_REFS 0
@@ -324,11 +328,11 @@ public:
            char name[100];
            snprintf(name, sizeof(name), DEBUG_REFS_CALLSTACK_PATH "/%p.stack",
                     this);
            int rc = open(name, O_RDWR | O_CREAT | O_APPEND, 644);
            int rc = open(name, O_RDWR | O_CREAT | O_APPEND, 0644);
            if (rc >= 0) {
                (void)write(rc, text.string(), text.length());
                close(rc);
                ALOGD("STACK TRACE for %p saved in %s", this, name);
                ALOGI("STACK TRACE for %p saved in %s", this, name);
            }
            else ALOGE("FAILED TO PRINT STACK TRACE for %p in %s: %s", this,
                      name, strerror(errno));