Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
4ad37480
Commit
4ad37480
authored
Jan 15, 2010
by
antirez
Browse files
thread safe zmalloc used memory counter
parent
b04a5df9
Changes
3
Show whitespace changes
Inline
Side-by-side
redis.c
View file @
4ad37480
...
@@ -6999,6 +6999,9 @@ static void vmInit(void) {
...
@@ -6999,6 +6999,9 @@ static void vmInit(void) {
int
pipefds
[
2
];
int
pipefds
[
2
];
size_t
stacksize
;
size_t
stacksize
;
if
(
server
.
vm_max_threads
!=
0
)
zmalloc_enable_thread_safeness
();
/* we need thread safe zmalloc() */
server
.
vm_fp
=
fopen
(
"/tmp/redisvm"
,
"w+b"
);
server
.
vm_fp
=
fopen
(
"/tmp/redisvm"
,
"w+b"
);
if
(
server
.
vm_fp
==
NULL
)
{
if
(
server
.
vm_fp
==
NULL
)
{
redisLog
(
REDIS_WARNING
,
"Impossible to open the swap file. Exiting."
);
redisLog
(
REDIS_WARNING
,
"Impossible to open the swap file. Exiting."
);
...
...
zmalloc.c
View file @
4ad37480
...
@@ -40,7 +40,28 @@
...
@@ -40,7 +40,28 @@
#define PREFIX_SIZE sizeof(size_t)
#define PREFIX_SIZE sizeof(size_t)
#endif
#endif
#define increment_used_memory(_n) do { \
if (zmalloc_thread_safe) { \
pthread_mutex_lock(&used_memory_mutex); \
used_memory += _n; \
pthread_mutex_unlock(&used_memory_mutex); \
} else { \
used_memory += _n; \
} \
} while(0)
#define decrement_used_memory(_n) do { \
if (zmalloc_thread_safe) { \
pthread_mutex_lock(&used_memory_mutex); \
used_memory -= _n; \
pthread_mutex_unlock(&used_memory_mutex); \
} else { \
used_memory -= _n; \
} \
} while(0)
static
size_t
used_memory
=
0
;
static
size_t
used_memory
=
0
;
static
int
zmalloc_thread_safe
=
0
;
pthread_mutex_t
used_memory_mutex
=
PTHREAD_MUTEX_INITIALIZER
;
pthread_mutex_t
used_memory_mutex
=
PTHREAD_MUTEX_INITIALIZER
;
static
void
zmalloc_oom
(
size_t
size
)
{
static
void
zmalloc_oom
(
size_t
size
)
{
...
@@ -55,11 +76,11 @@ void *zmalloc(size_t size) {
...
@@ -55,11 +76,11 @@ void *zmalloc(size_t size) {
if
(
!
ptr
)
zmalloc_oom
(
size
);
if
(
!
ptr
)
zmalloc_oom
(
size
);
#ifdef HAVE_MALLOC_SIZE
#ifdef HAVE_MALLOC_SIZE
used_memory
+=
redis_malloc_size
(
ptr
);
increment_
used_memory
(
redis_malloc_size
(
ptr
)
)
;
return
ptr
;
return
ptr
;
#else
#else
*
((
size_t
*
)
ptr
)
=
size
;
*
((
size_t
*
)
ptr
)
=
size
;
used_memory
+=
size
+
PREFIX_SIZE
;
increment_
used_memory
(
size
+
PREFIX_SIZE
)
;
return
(
char
*
)
ptr
+
PREFIX_SIZE
;
return
(
char
*
)
ptr
+
PREFIX_SIZE
;
#endif
#endif
}
}
...
@@ -77,8 +98,8 @@ void *zrealloc(void *ptr, size_t size) {
...
@@ -77,8 +98,8 @@ void *zrealloc(void *ptr, size_t size) {
newptr
=
realloc
(
ptr
,
size
);
newptr
=
realloc
(
ptr
,
size
);
if
(
!
newptr
)
zmalloc_oom
(
size
);
if
(
!
newptr
)
zmalloc_oom
(
size
);
used_memory
-=
oldsize
;
decrement_
used_memory
(
oldsize
)
;
used_memory
+=
redis_malloc_size
(
newptr
);
increment_
used_memory
(
redis_malloc_size
(
newptr
)
)
;
return
newptr
;
return
newptr
;
#else
#else
realptr
=
(
char
*
)
ptr
-
PREFIX_SIZE
;
realptr
=
(
char
*
)
ptr
-
PREFIX_SIZE
;
...
@@ -87,8 +108,8 @@ void *zrealloc(void *ptr, size_t size) {
...
@@ -87,8 +108,8 @@ void *zrealloc(void *ptr, size_t size) {
if
(
!
newptr
)
zmalloc_oom
(
size
);
if
(
!
newptr
)
zmalloc_oom
(
size
);
*
((
size_t
*
)
newptr
)
=
size
;
*
((
size_t
*
)
newptr
)
=
size
;
used_memory
-=
oldsize
;
decrement_
used_memory
(
oldsize
)
;
used_memory
+=
size
;
increment_
used_memory
(
size
)
;
return
(
char
*
)
newptr
+
PREFIX_SIZE
;
return
(
char
*
)
newptr
+
PREFIX_SIZE
;
#endif
#endif
}
}
...
@@ -101,12 +122,12 @@ void zfree(void *ptr) {
...
@@ -101,12 +122,12 @@ void zfree(void *ptr) {
if
(
ptr
==
NULL
)
return
;
if
(
ptr
==
NULL
)
return
;
#ifdef HAVE_MALLOC_SIZE
#ifdef HAVE_MALLOC_SIZE
used_memory
-=
redis_malloc_size
(
ptr
);
decrement_
used_memory
(
redis_malloc_size
(
ptr
)
)
;
free
(
ptr
);
free
(
ptr
);
#else
#else
realptr
=
(
char
*
)
ptr
-
PREFIX_SIZE
;
realptr
=
(
char
*
)
ptr
-
PREFIX_SIZE
;
oldsize
=
*
((
size_t
*
)
realptr
);
oldsize
=
*
((
size_t
*
)
realptr
);
used_memory
-=
oldsize
+
PREFIX_SIZE
;
decrement_
used_memory
(
oldsize
+
PREFIX_SIZE
)
;
free
(
realptr
);
free
(
realptr
);
#endif
#endif
}
}
...
@@ -120,5 +141,14 @@ char *zstrdup(const char *s) {
...
@@ -120,5 +141,14 @@ char *zstrdup(const char *s) {
}
}
size_t
zmalloc_used_memory
(
void
)
{
size_t
zmalloc_used_memory
(
void
)
{
return
used_memory
;
size_t
um
;
if
(
zmalloc_thread_safe
)
pthread_mutex_lock
(
&
used_memory_mutex
);
um
=
used_memory
;
if
(
zmalloc_thread_safe
)
pthread_mutex_unlock
(
&
used_memory_mutex
);
return
um
;
}
void
zmalloc_enable_thread_safeness
(
void
)
{
zmalloc_thread_safe
=
1
;
}
}
zmalloc.h
View file @
4ad37480
...
@@ -36,5 +36,6 @@ void *zrealloc(void *ptr, size_t size);
...
@@ -36,5 +36,6 @@ void *zrealloc(void *ptr, size_t size);
void
zfree
(
void
*
ptr
);
void
zfree
(
void
*
ptr
);
char
*
zstrdup
(
const
char
*
s
);
char
*
zstrdup
(
const
char
*
s
);
size_t
zmalloc_used_memory
(
void
);
size_t
zmalloc_used_memory
(
void
);
void
zmalloc_enable_thread_safeness
(
void
);
#endif
/* _ZMALLOC_H */
#endif
/* _ZMALLOC_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment