Files
huishou/node_modules/nodegit/include/reference_counter.h
T
2026-07-27 13:37:48 +08:00

31 lines
1.1 KiB
C++

#ifndef REFERENCE_COUNTER_H
#define REFERENCE_COUNTER_H
#include <unordered_map>
#include "lock_master.h"
// There are certain instances in libgit2 which can be retrieved from multiple sources
// We need to make sure that we're counting how many times we've seen that pointer
// so that when we are performing free behavior, we don't free it until it is no longer
// referenced. The main example of this behavior is the repository instance, where
// after git_repository_open open (first instance) we can git_commit_lookup, followed by
// git_commit_owner (second instance).
//
// I was hoping that we could construct a Persistent handle, but that would interfere with
// GC. We want it to attmept to GC, and if this handle exists, the final repo will not
// free itself :(.
//
// Make sure to utilize LockMaster when incrementing or decrementing a reference count.
class ReferenceCounter {
public:
static void incrementCountForPointer(void *ptr);
static unsigned long decrementCountForPointer(void *ptr);
private:
static std::unordered_map<void *, unsigned long> referenceCountByPointer;
};
#endif