Skip to content

Commit a4e33ad

Browse files
jbachorikr1viollet
authored andcommitted
Thread-safe lazy initialization pattern
1 parent d8ad9f2 commit a4e33ad

File tree

4 files changed

+15
-9
lines changed

4 files changed

+15
-9
lines changed

ddprof-lib/src/main/cpp/libraries.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
#include "vmEntry.h"
66
#include "vmStructs.h"
77

8-
Libraries* Libraries::_instance = new Libraries();
9-
108
void Libraries::mangle(const char *name, char *buf, size_t size) {
119
char *buf_end = buf + size;
1210
strcpy(buf, "_ZN");

ddprof-lib/src/main/cpp/libraries.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55

66
class Libraries {
77
private:
8-
static Libraries * _instance;
9-
108
CodeCacheArray _native_libs;
119
CodeCache _runtime_stubs;
1210

@@ -21,7 +19,14 @@ class Libraries {
2119
CodeCache *findLibraryByName(const char *lib_name);
2220
CodeCache *findLibraryByAddress(const void *address);
2321

24-
static Libraries *instance() { return _instance; }
22+
static Libraries *instance() {
23+
static Libraries instance;
24+
return &instance;
25+
}
26+
27+
// Delete copy constructor and assignment operator to prevent copies
28+
Libraries(const Libraries&) = delete;
29+
Libraries& operator=(const Libraries&) = delete;
2530
};
2631

2732
#endif // _LIBRARIES_H

ddprof-lib/src/main/cpp/livenessTracker.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
#include <jni.h>
3434
#include <string.h>
3535

36-
LivenessTracker *const LivenessTracker::_instance = new LivenessTracker();
3736
constexpr int LivenessTracker::MAX_TRACKING_TABLE_SIZE;
3837
constexpr int LivenessTracker::MIN_SAMPLING_INTERVAL;
3938

ddprof-lib/src/main/cpp/livenessTracker.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,14 @@ class LivenessTracker {
8282

8383
jlong getMaxMemory(JNIEnv *env);
8484

85-
static LivenessTracker *const _instance;
86-
8785
public:
88-
static LivenessTracker *instance() { return _instance; }
86+
static LivenessTracker *instance() {
87+
static LivenessTracker instance;
88+
return &instance;
89+
}
90+
// Delete copy constructor and assignment operator to prevent copies
91+
LivenessTracker(const LivenessTracker&) = delete;
92+
LivenessTracker& operator=(const LivenessTracker&) = delete;
8993

9094
LivenessTracker()
9195
: _initialized(false), _enabled(false), _stored_error(Error::OK),

0 commit comments

Comments
 (0)