Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 18e6387

Browse files
committed
Refactor LOCK, change interface design to consistent with php flock()
1 parent 0edf198 commit 18e6387

File tree

20 files changed

+182
-394
lines changed

20 files changed

+182
-394
lines changed

‎.github/workflows/coverity.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ jobs:
3636
3737
- name: Run build steps
3838
run: |
39-
sudo phpize && ./configure
39+
sudo phpize && ./configure --enable-openssl --enable-mysqlnd --enable-sockets --enable-swoole-curl
4040
4141
- name: Run Coverity Scan Analysis Tool
4242
run: |
4343
export PATH=${COV_TOOLS_DIR}/bin:$PATH
4444
cd ${COV_BUILD_DIR}
45-
cov-build --dir ${COV_RESULTS_DIR} make -j 4
45+
cov-build --dir ${COV_RESULTS_DIR} make -j $(nproc)
4646
4747
- name: Upload Coverity Scan Analysis results
4848
run: |

‎core-tests/src/lock/lock.cpp‎

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,16 @@
2323

2424
#include <thread>
2525

26-
using swLock = swoole::Lock;
27-
26+
using swoole::Lock;
2827
using swoole::RWLock;
29-
#ifdef HAVE_SPINLOCK
3028
using swoole::SpinLock;
31-
#endif
3229
using swoole::Coroutine;
3330
using swoole::CoroutineLock;
3431
using swoole::Mutex;
3532
using swoole::coroutine::System;
3633
using swoole::test::coroutine;
3734

38-
static void test_func(swLock &lock) {
35+
static void test_func(Lock &lock) {
3936
int count = 0;
4037
const int N = 100000;
4138

@@ -56,23 +53,23 @@ static void test_func(swLock &lock) {
5653
ASSERT_EQ(count, N * 2);
5754
}
5855

59-
static void test_lock_rd_func(swLock &lock) {
56+
static void test_lock_rd_func(Lock &lock) {
6057
std::thread t1([&lock]() {
61-
ASSERT_EQ(lock.lock_rd(), 0);
58+
ASSERT_EQ(lock.lock(LOCK_SH), 0);
6259
usleep(2000); // wait
6360
lock.unlock();
6461
});
6562

6663
std::thread t2([&lock]() {
6764
usleep(1000);
68-
ASSERT_GE(lock.trylock_rd(), 0);
65+
ASSERT_GE(lock.lock(LOCK_SH | LOCK_NB), 0);
6966
});
7067

7168
t1.join();
7269
t2.join();
7370
}
7471

75-
static void test_share_lock_fun(swLock &lock) {
72+
static void test_share_lock_fun(Lock &lock) {
7673
lock.lock();
7774
const int sleep_us = 10000;
7875
int magic_num = swoole_rand(100000, 9999999);
@@ -100,7 +97,7 @@ static void test_share_lock_fun(swLock &lock) {
10097

10198
TEST(lock, mutex) {
10299
Mutex lock(0);
103-
test_func(reinterpret_cast<swLock &>(lock));
100+
test_func(reinterpret_cast<Lock &>(lock));
104101
}
105102

106103
TEST(lock, lockwait) {
@@ -130,7 +127,7 @@ TEST(lock, lockwait) {
130127
}
131128

132129
TEST(lock, shared) {
133-
Mutex lock(Mutex::PROCESS_SHARED);
130+
Mutex lock(true);
134131
test_share_lock_fun(lock);
135132
}
136133

@@ -160,7 +157,7 @@ TEST(lock, coroutine_lock) {
160157
ASSERT_EQ(lock->unlock(), 0);
161158
});
162159

163-
Coroutine::create([lock](void *) { ASSERT_EQ(lock->trylock(), EBUSY); });
160+
Coroutine::create([lock](void *) { ASSERT_EQ(lock->lock(LOCK_NB), EBUSY); });
164161
});
165162

166163
delete lock;
@@ -185,31 +182,31 @@ TEST(lock, coroutine_lock_cancel) {
185182

186183
TEST(lock, coroutine_lock_rd) {
187184
auto *lock = new CoroutineLock(false);
188-
ASSERT_EQ(lock->lock_rd(), SW_ERROR_CO_OUT_OF_COROUTINE);
185+
ASSERT_EQ(lock->lock(LOCK_SH), SW_ERROR_CO_OUT_OF_COROUTINE);
189186

190187
coroutine::run([lock](void *arg) {
191188
Coroutine::create([lock](void *) {
192-
ASSERT_EQ(lock->lock_rd(), 0);
193-
ASSERT_EQ(lock->lock_rd(), 0);
189+
ASSERT_EQ(lock->lock(LOCK_SH), 0);
190+
ASSERT_EQ(lock->lock(LOCK_SH), 0);
194191
System::sleep(0.3);
195192
ASSERT_EQ(lock->unlock(), 0);
196193
});
197194

198195
Coroutine::create([lock](void *) {
199-
ASSERT_EQ(lock->lock_rd(), 0);
196+
ASSERT_EQ(lock->lock(LOCK_SH), 0);
200197
System::sleep(0.3);
201198
ASSERT_EQ(lock->unlock(), 0);
202199
});
203200

204-
Coroutine::create([lock](void *) { ASSERT_EQ(lock->trylock_rd(), EBUSY); });
201+
Coroutine::create([lock](void *) { ASSERT_EQ(lock->lock(LOCK_SH | LOCK_NB), EBUSY); });
205202
});
206203

207204
delete lock;
208205
}
209206

210207
#ifdef HAVE_RWLOCK
211208
TEST(lock, rwlock_shared) {
212-
RWLock lock(Mutex::PROCESS_SHARED);
209+
RWLock lock(true);
213210
test_share_lock_fun(lock);
214211
}
215212

@@ -233,7 +230,7 @@ TEST(lock, rw_try_wr) {
233230

234231
std::thread t2([&lock]() {
235232
usleep(1000);
236-
ASSERT_GT(lock.trylock(), 0);
233+
ASSERT_GT(lock.lock(LOCK_NB), 0);
237234
});
238235
t1.join();
239236
t2.join();
@@ -242,7 +239,7 @@ TEST(lock, rw_try_wr) {
242239

243240
#ifdef HAVE_SPINLOCK
244241
TEST(lock, spinlock_shared) {
245-
SpinLock lock(Mutex::PROCESS_SHARED);
242+
SpinLock lock(true);
246243
test_share_lock_fun(lock);
247244
}
248245

‎core-tests/src/network/client.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ static void test_sync_client_dgram(const char *host, int port, enum swSocketType
7171
char buf[128];
7272
pid_t pid;
7373

74-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
74+
Mutex *lock = new Mutex(true);
7575
lock->lock();
7676

7777
Process proc([&](Process *proc) {
@@ -626,7 +626,7 @@ TEST(client, async_connect_timeout) {
626626
static void test_async_client_dgram(const char *host, int port, enum swSocketType type) {
627627
pid_t pid;
628628

629-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
629+
Mutex *lock = new Mutex(true);
630630
lock->lock();
631631

632632
Process proc([&](Process *proc) {

‎core-tests/src/protocol/http2.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ static void test_ssl_http2(Server::Mode mode) {
416416
serv.worker_num = 1;
417417
swoole_set_log_level(SW_LOG_INFO);
418418

419-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
419+
Mutex *lock = new Mutex(true);
420420
lock->lock();
421421

422422
const int server_port = __LINE__ + TEST_PORT;

‎core-tests/src/server/http_server.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1434,7 +1434,7 @@ TEST(http_server, abort_connection) {
14341434

14351435
serv.create();
14361436

1437-
Mutex lock(Mutex::PROCESS_SHARED);
1437+
Mutex lock(true);
14381438
lock.lock();
14391439

14401440
thread th([&serv, port, &lock]() {
@@ -1884,7 +1884,7 @@ static void test_ssl_http(Server::Mode mode) {
18841884
serv.worker_num = 1;
18851885
swoole_set_log_level(SW_LOG_INFO);
18861886

1887-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
1887+
Mutex *lock = new Mutex(true);
18881888
lock->lock();
18891889

18901890
const int server_port = __LINE__ + TEST_PORT;

‎core-tests/src/server/server.cpp‎

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ static void test_process(bool single_thread = false) {
423423
test::counter_init();
424424
auto counter = test::counter_ptr();
425425

426-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
426+
Mutex *lock = new Mutex(true);
427427
lock->lock();
428428

429429
ListenPort *port = serv.add_port(SW_SOCK_TCP, TEST_HOST, 0);
@@ -560,7 +560,7 @@ static void test_process_send_in_user_worker() {
560560
test::counter_init();
561561
auto counter = test::counter_ptr();
562562

563-
Mutex lock(Mutex::PROCESS_SHARED);
563+
Mutex lock(true);
564564
lock.lock();
565565

566566
ListenPort *port = serv.add_port(SW_SOCK_TCP, TEST_HOST, 0);
@@ -1243,7 +1243,7 @@ TEST(server, ssl) {
12431243
serv.worker_num = 1;
12441244
swoole_set_log_level(SW_LOG_WARNING);
12451245

1246-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
1246+
Mutex *lock = new Mutex(true);
12471247
lock->lock();
12481248

12491249
ListenPort *port = serv.add_port(static_cast<enum swSocketType>(SW_SOCK_TCP | SW_SOCK_SSL), TEST_HOST, 0);
@@ -1311,7 +1311,7 @@ TEST(server, ssl_error) {
13111311
serv.worker_num = 1;
13121312
swoole_set_log_level(SW_LOG_WARNING);
13131313

1314-
Mutex lock(Mutex::PROCESS_SHARED);
1314+
Mutex lock(true);
13151315
lock.lock();
13161316

13171317
ListenPort *port = serv.add_port(static_cast<enum swSocketType>(SW_SOCK_TCP | SW_SOCK_SSL), TEST_HOST, 0);
@@ -1364,7 +1364,7 @@ TEST(server, ssl_write) {
13641364
serv.worker_num = 1;
13651365
swoole_set_log_level(SW_LOG_WARNING);
13661366

1367-
Mutex lock(Mutex::PROCESS_SHARED);
1367+
Mutex lock(true);
13681368
lock.lock();
13691369

13701370
ListenPort *port = serv.add_port(static_cast<enum swSocketType>(SW_SOCK_TCP | SW_SOCK_SSL), TEST_HOST, 0);
@@ -1436,7 +1436,7 @@ TEST(server, dtls) {
14361436
serv.worker_num = 1;
14371437
swoole_set_log_level(SW_LOG_WARNING);
14381438

1439-
auto *lock = new Mutex(Mutex::PROCESS_SHARED);
1439+
auto *lock = new Mutex(true);
14401440
lock->lock();
14411441

14421442
auto port = serv.add_port((enum swSocketType)(SW_SOCK_UDP | SW_SOCK_SSL), TEST_HOST, 0);
@@ -1555,7 +1555,7 @@ static void test_ssl_client_cert(Server::Mode mode) {
15551555
serv.worker_num = 1;
15561556
swoole_set_log_level(SW_LOG_INFO);
15571557

1558-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
1558+
Mutex *lock = new Mutex(true);
15591559
lock->lock();
15601560

15611561
ListenPort *port = serv.add_port((enum swSocketType)(SW_SOCK_TCP | SW_SOCK_SSL), TEST_HOST, 0);
@@ -2665,7 +2665,7 @@ TEST(server, forward_message) {
26652665
ListenPort *port = serv.add_port(SW_SOCK_TCP, TEST_HOST, 0);
26662666
ASSERT_TRUE(port);
26672667

2668-
swoole::Mutex lock(swoole::Mutex::PROCESS_SHARED);
2668+
swoole::Mutex lock(true);
26692669
lock.lock();
26702670

26712671
ASSERT_EQ(serv.create(), SW_OK);
@@ -2791,7 +2791,7 @@ TEST(server, abort_worker) {
27912791
auto port = server->add_port(SW_SOCK_TCP, TEST_HOST, 0);
27922792
ASSERT_EQ(server->create(), 0);
27932793

2794-
swoole::Mutex lock(swoole::Mutex::PROCESS_SHARED);
2794+
swoole::Mutex lock(true);
27952795
lock.lock();
27962796

27972797
std::thread t1([&]() {
@@ -2868,7 +2868,7 @@ TEST(server, reactor_thread_pipe_writable) {
28682868
port->protocol.package_max_length = 8 * 1024 * 1024;
28692869
network::Stream::set_protocol(&port->protocol);
28702870

2871-
Mutex lock(Mutex::PROCESS_SHARED);
2871+
Mutex lock(true);
28722872
lock.lock();
28732873

28742874
ASSERT_EQ(serv.create(), SW_OK);
@@ -3266,7 +3266,7 @@ static void test_kill_worker(Server::Mode mode, const Options &options) {
32663266
test::counter_init();
32673267
int *counter = test::counter_ptr();
32683268

3269-
Mutex lock(Mutex::PROCESS_SHARED);
3269+
Mutex lock(true);
32703270
lock.lock();
32713271

32723272
ListenPort *port = serv.add_port(SW_SOCK_TCP, TEST_HOST, 0);
@@ -3424,7 +3424,7 @@ static void test_kill_self(Server::Mode mode) {
34243424

34253425
int *counter = (int *) sw_mem_pool()->alloc(sizeof(int) * 6);
34263426

3427-
swoole::Mutex lock(swoole::Mutex::PROCESS_SHARED);
3427+
swoole::Mutex lock(true);
34283428
lock.lock();
34293429

34303430
ListenPort *port = serv.add_port(SW_SOCK_TCP, TEST_HOST, 0);
@@ -3506,7 +3506,7 @@ TEST(server, no_idle_worker) {
35063506
swoole_set_log_file(TEST_LOG_FILE);
35073507
swoole_set_log_level(SW_LOG_WARNING);
35083508

3509-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
3509+
Mutex *lock = new Mutex(true);
35103510
lock->lock();
35113511

35123512
ListenPort *port = serv.add_port(SW_SOCK_TCP, TEST_HOST, 0);
@@ -3568,7 +3568,7 @@ TEST(server, no_idle_task_worker) {
35683568
swoole_set_log_file(TEST_LOG_FILE);
35693569
swoole_set_log_level(SW_LOG_WARNING);
35703570

3571-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
3571+
Mutex *lock = new Mutex(true);
35723572
lock->lock();
35733573

35743574
ListenPort *port = serv.add_port(SW_SOCK_TCP, TEST_HOST, 0);
@@ -3638,7 +3638,7 @@ static void test_conn_overflow(Server::Mode mode, bool send_yield) {
36383638
test::counter_init();
36393639
auto counter = test::counter_ptr();
36403640

3641-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
3641+
Mutex *lock = new Mutex(true);
36423642
lock->lock();
36433643

36443644
ListenPort *port = serv.add_port(SW_SOCK_TCP, TEST_HOST, 0);
@@ -3724,7 +3724,7 @@ TEST(server, send_timeout) {
37243724
test::counter_init();
37253725
auto counter = test::counter_ptr();
37263726

3727-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
3727+
Mutex *lock = new Mutex(true);
37283728
lock->lock();
37293729

37303730
ListenPort *port = serv.add_port(SW_SOCK_TCP, TEST_HOST, 0);
@@ -3812,7 +3812,7 @@ static void test_max_request(Server::Mode mode) {
38123812
serv.worker_num = 2;
38133813
serv.max_request = 128;
38143814

3815-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
3815+
Mutex *lock = new Mutex(true);
38163816
lock->lock();
38173817

38183818
ASSERT_NE(serv.add_port(SW_SOCK_TCP, TEST_HOST, 0), nullptr);
@@ -3876,7 +3876,7 @@ TEST(server, watermark) {
38763876
Server serv(Server::MODE_PROCESS);
38773877
serv.worker_num = 2;
38783878

3879-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
3879+
Mutex *lock = new Mutex(true);
38803880
lock->lock();
38813881

38823882
String wbuf;
@@ -3952,7 +3952,7 @@ TEST(server, discard_data) {
39523952
swoole_set_log_file(TEST_LOG_FILE);
39533953
swoole_set_log_level(SW_LOG_WARNING);
39543954

3955-
Mutex *lock = new Mutex(Mutex::PROCESS_SHARED);
3955+
Mutex *lock = new Mutex(true);
39563956
lock->lock();
39573957

39583958
ListenPort *port = serv.add_port(SW_SOCK_TCP, TEST_HOST, 0);
@@ -4021,7 +4021,7 @@ TEST(server, pause_and_resume) {
40214021
ListenPort *port = serv.add_port(SW_SOCK_TCP, TEST_HOST, 0);
40224022
ASSERT_TRUE(port);
40234023

4024-
Mutex lock(Mutex::PROCESS_SHARED);
4024+
Mutex lock(true);
40254025
lock.lock();
40264026

40274027
ASSERT_EQ(serv.create(), SW_OK);
@@ -4087,7 +4087,7 @@ TEST(server, max_queued_bytes) {
40874087
ListenPort *port = serv.add_port(SW_SOCK_TCP, TEST_HOST, 0);
40884088
ASSERT_TRUE(port);
40894089

4090-
Mutex lock(Mutex::PROCESS_SHARED);
4090+
Mutex lock(true);
40914091
lock.lock();
40924092

40934093
ASSERT_EQ(serv.create(), SW_OK);

‎ext-src/stubs/php_swoole_coroutine_lock.stub.php‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22
namespace Swoole\Coroutine {
33
class Lock {
44
public function __construct(bool $shared = false) {}
5-
public function __destruct() {}
6-
public function lock(): bool {}
7-
public function trylock(): bool {}
5+
public function lock(int $operation = LOCK_EX, float $timeout = 1.0): bool {}
86
public function unlock(): bool {}
97
}
108
}

0 commit comments

Comments
 (0)