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
3cd92e87
Commit
3cd92e87
authored
May 15, 2020
by
antirez
Browse files
Merge branch 'unstable' of github.com:/antirez/redis into unstable
parents
1a7cd2c0
8f5c2bc8
Changes
7
Show whitespace changes
Inline
Side-by-side
src/Makefile
View file @
3cd92e87
...
...
@@ -128,6 +128,14 @@ else
ifeq
($(uname_S),DragonFly)
# FreeBSD
FINAL_LIBS
+=
-lpthread
-lexecinfo
else
ifeq
($(uname_S),OpenBSD)
# OpenBSD
FINAL_LIBS
+=
-lpthread
-lexecinfo
else
ifeq
($(uname_S),NetBSD)
# NetBSD
FINAL_LIBS
+=
-lpthread
-lexecinfo
else
# All the other OSes (notably Linux)
FINAL_LDFLAGS
+=
-rdynamic
...
...
@@ -138,6 +146,8 @@ endif
endif
endif
endif
endif
endif
# Include paths to dependencies
FINAL_CFLAGS
+=
-I
../deps/hiredis
-I
../deps/linenoise
-I
../deps/lua/src
...
...
src/ae.c
View file @
3cd92e87
...
...
@@ -238,6 +238,7 @@ long long aeCreateTimeEvent(aeEventLoop *eventLoop, long long milliseconds,
te
->
clientData
=
clientData
;
te
->
prev
=
NULL
;
te
->
next
=
eventLoop
->
timeEventHead
;
te
->
refcount
=
0
;
if
(
te
->
next
)
te
->
next
->
prev
=
te
;
eventLoop
->
timeEventHead
=
te
;
...
...
@@ -316,6 +317,13 @@ static int processTimeEvents(aeEventLoop *eventLoop) {
/* Remove events scheduled for deletion. */
if
(
te
->
id
==
AE_DELETED_EVENT_ID
)
{
aeTimeEvent
*
next
=
te
->
next
;
/* If a reference exists for this timer event,
* don't free it. This is currently incremented
* for recursive timerProc calls */
if
(
te
->
refcount
)
{
te
=
next
;
continue
;
}
if
(
te
->
prev
)
te
->
prev
->
next
=
te
->
next
;
else
...
...
@@ -345,7 +353,9 @@ static int processTimeEvents(aeEventLoop *eventLoop) {
int
retval
;
id
=
te
->
id
;
te
->
refcount
++
;
retval
=
te
->
timeProc
(
eventLoop
,
id
,
te
->
clientData
);
te
->
refcount
--
;
processed
++
;
if
(
retval
!=
AE_NOMORE
)
{
aeAddMillisecondsToNow
(
retval
,
&
te
->
when_sec
,
&
te
->
when_ms
);
...
...
src/ae.h
View file @
3cd92e87
...
...
@@ -86,6 +86,8 @@ typedef struct aeTimeEvent {
void
*
clientData
;
struct
aeTimeEvent
*
prev
;
struct
aeTimeEvent
*
next
;
int
refcount
;
/* refcount to prevent timer events from being
* freed in recursive time event calls. */
}
aeTimeEvent
;
/* A fired event */
...
...
src/config.h
View file @
3cd92e87
...
...
@@ -248,7 +248,7 @@ int pthread_setname_np(const char *name);
#endif
/* Check if we can use setcpuaffinity(). */
#if (defined __linux || defined __NetBSD__ || defined __FreeBSD__
|| defined __OpenBSD__
)
#if (defined __linux || defined __NetBSD__ || defined __FreeBSD__)
#define USE_SETCPUAFFINITY
void
setcpuaffinity
(
const
char
*
cpulist
);
#endif
...
...
src/setcpuaffinity.c
View file @
3cd92e87
...
...
@@ -36,6 +36,10 @@
#include <sys/param.h>
#include <sys/cpuset.h>
#endif
#ifdef __NetBSD__
#include <pthread.h>
#include <sched.h>
#endif
#include "config.h"
#ifdef USE_SETCPUAFFINITY
...
...
@@ -71,11 +75,18 @@ void setcpuaffinity(const char *cpulist) {
#ifdef __FreeBSD__
cpuset_t
cpuset
;
#endif
#ifdef __NetBSD__
cpuset_t
*
cpuset
;
#endif
if
(
!
cpulist
)
return
;
#ifndef __NetBSD__
CPU_ZERO
(
&
cpuset
);
#else
cpuset
=
cpuset_create
();
#endif
q
=
cpulist
;
while
(
p
=
q
,
q
=
next_token
(
q
,
','
),
p
)
{
...
...
@@ -110,7 +121,11 @@ void setcpuaffinity(const char *cpulist) {
return
;
while
(
a
<=
b
)
{
#ifndef __NetBSD__
CPU_SET
(
a
,
&
cpuset
);
#else
cpuset_set
(
a
,
cpuset
);
#endif
a
+=
s
;
}
}
...
...
@@ -124,6 +139,10 @@ void setcpuaffinity(const char *cpulist) {
#ifdef __FreeBSD__
cpuset_setaffinity
(
CPU_LEVEL_WHICH
,
CPU_WHICH_TID
,
-
1
,
sizeof
(
cpuset
),
&
cpuset
);
#endif
#ifdef __NetBSD__
pthread_setaffinity_np
(
pthread_self
(),
cpuset_size
(
cpuset
),
cpuset
);
cpuset_destroy
(
cpuset
);
#endif
}
#endif
/* USE_SETCPUAFFINITY */
src/tls.c
View file @
3cd92e87
...
...
@@ -93,11 +93,56 @@ static int parseProtocolsConfig(const char *str) {
* served to the reader yet. */
static
list
*
pending_list
=
NULL
;
/**
* OpenSSL global initialization and locking handling callbacks.
* Note that this is only required for OpenSSL < 1.1.0.
*/
#if OPENSSL_VERSION_NUMBER < 0x10100000L
#define USE_CRYPTO_LOCKS
#endif
#ifdef USE_CRYPTO_LOCKS
static
pthread_mutex_t
*
openssl_locks
;
static
void
sslLockingCallback
(
int
mode
,
int
lock_id
,
const
char
*
f
,
int
line
)
{
pthread_mutex_t
*
mt
=
openssl_locks
+
lock_id
;
if
(
mode
&
CRYPTO_LOCK
)
{
pthread_mutex_lock
(
mt
);
}
else
{
pthread_mutex_unlock
(
mt
);
}
(
void
)
f
;
(
void
)
line
;
}
static
void
initCryptoLocks
(
void
)
{
unsigned
i
,
nlocks
;
if
(
CRYPTO_get_locking_callback
()
!=
NULL
)
{
/* Someone already set the callback before us. Don't destroy it! */
return
;
}
nlocks
=
CRYPTO_num_locks
();
openssl_locks
=
zmalloc
(
sizeof
(
*
openssl_locks
)
*
nlocks
);
for
(
i
=
0
;
i
<
nlocks
;
i
++
)
{
pthread_mutex_init
(
openssl_locks
+
i
,
NULL
);
}
CRYPTO_set_locking_callback
(
sslLockingCallback
);
}
#endif
/* USE_CRYPTO_LOCKS */
void
tlsInit
(
void
)
{
ERR_load_crypto_strings
();
SSL_load_error_strings
();
SSL_library_init
();
#ifdef USE_CRYPTO_LOCKS
initCryptoLocks
();
#endif
if
(
!
RAND_poll
())
{
serverLog
(
LL_WARNING
,
"OpenSSL: Failed to seed random number generator."
);
}
...
...
tests/unit/tls.tcl
View file @
3cd92e87
...
...
@@ -25,26 +25,6 @@ start_server {tags {"tls"}} {
}
test
{
TLS: Verify tls-protocols behaves as expected
}
{
r CONFIG SET tls-protocols TLSv1
set s
[
redis
[
srv 0 host
]
[
srv 0 port
]
0 1
{
-tls1 0
}]
catch
{
$s
PING
}
e
assert_match
{
*I/O error*
}
$e
set s
[
redis
[
srv 0 host
]
[
srv 0 port
]
0 1
{
-tls1 1
}]
catch
{
$s
PING
}
e
assert_match
{
PONG
}
$e
r CONFIG SET tls-protocols TLSv1.1
set s
[
redis
[
srv 0 host
]
[
srv 0 port
]
0 1
{
-tls1.1 0
}]
catch
{
$s
PING
}
e
assert_match
{
*I/O error*
}
$e
set s
[
redis
[
srv 0 host
]
[
srv 0 port
]
0 1
{
-tls1.1 1
}]
catch
{
$s
PING
}
e
assert_match
{
PONG
}
$e
r CONFIG SET tls-protocols TLSv1.2
set s
[
redis
[
srv 0 host
]
[
srv 0 port
]
0 1
{
-tls1.2 0
}]
...
...
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