1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
From 07c762243598947e932502e92674df7fc6d01204 Mon Sep 17 00:00:00 2001
From: matyhtf <mikan.tenny@gmail.com>
Date: Tue, 18 Apr 2017 18:46:34 +0800
Subject: [PATCH] fixed compile error with enable-ringbuffer
---
src/network/ReactorThread.c | 91 +--------------------------------------------
1 file changed, 2 insertions(+), 89 deletions(-)
diff --git a/src/network/ReactorThread.c b/src/network/ReactorThread.c
index 877fdc4..5994d27 100644
--- a/src/network/ReactorThread.c
+++ b/src/network/ReactorThread.c
@@ -1263,7 +1263,6 @@ int swReactorThread_dispatch(swConnection *conn, char *data, uint32_t length)
#ifdef SW_USE_RINGBUFFER
swServer *serv = SwooleG.serv;
swReactorThread *thread = swServer_get_thread(serv, SwooleTG.id);
- int target_worker_id = swServer_worker_schedule(serv, conn->fd);
swPackage package;
package.length = length;
@@ -1271,12 +1270,12 @@ int swReactorThread_dispatch(swConnection *conn, char *data, uint32_t length)
task.data.info.type = SW_EVENT_PACKAGE;
task.data.info.len = sizeof(package);
- task.target_worker_id = target_worker_id;
- //swoole_dump_bin(package.data, 's', buffer->length);
memcpy(package.data, data, package.length);
memcpy(task.data.data, &package, sizeof(package));
+ task.target_worker_id = swServer_worker_schedule(serv, conn->fd, &task.data);
+
//dispatch failed, free the memory.
if (factory->dispatch(factory, &task) < 0)
{
@@ -1335,92 +1334,6 @@ int swReactorThread_dispatch(swConnection *conn, char *data, uint32_t length)
return SW_OK;
}
-#if 0
-int swReactorThread_dispatch_array_buffer(swReactorThread *thread, swConnection *conn)
-{
- swDispatchData task;
- swFactory *factory = SwooleG.factory;
-
- task.data.info.fd = conn->fd;
- task.data.info.from_id = conn->from_id;
-
- swBuffer *buffer = conn->in_buffer;
- swBuffer_trunk *trunk = swBuffer_get_trunk(buffer);
-
-#ifdef SW_USE_RINGBUFFER
- swServer *serv = SwooleG.serv;
- uint16_t target_worker_id = swServer_worker_schedule(serv, conn->fd);
- swPackage package;
-
- package.length = 0;
- package.data = swReactorThread_alloc(thread, buffer->length);
-
- task.data.info.type = SW_EVENT_PACKAGE;
-
- while (trunk != NULL)
- {
- task.data.info.len = trunk->length;
- memcpy(package.data + package.length, trunk->store.ptr, trunk->length);
- package.length += trunk->length;
-
- swBuffer_pop_trunk(buffer, trunk);
- trunk = swBuffer_get_trunk(buffer);
- }
- task.data.info.len = sizeof(package);
- task.target_worker_id = target_worker_id;
- memcpy(task.data.data, &package, sizeof(package));
- //swWarn("[ReactorThread] copy_n=%d", package.length);
- //dispatch failed, free the memory.
- if (factory->dispatch(factory, &task) < 0)
- {
- thread->buffer_input->free(thread->buffer_input, package.data);
- }
- else
- {
- return SW_OK;
- }
-#else
- int ret;
- task.data.info.type = SW_EVENT_PACKAGE_START;
- task.target_worker_id = -1;
-
- /**
- * lock target
- */
- SwooleTG.factory_lock_target = 1;
-
- while (trunk != NULL)
- {
- task.data.info.fd = conn->fd;
- task.data.info.len = trunk->length;
- memcpy(task.data.data, trunk->store.ptr, task.data.info.len);
- //package end
- if (trunk->next == NULL)
- {
- task.data.info.type = SW_EVENT_PACKAGE_END;
- }
- ret = factory->dispatch(factory, &task);
- //TODO: 处理数据失败,数据将丢失
- if (ret < 0)
- {
- swWarn("factory->dispatch() failed.");
- }
- swBuffer_pop_trunk(buffer, trunk);
- trunk = swBuffer_get_trunk(buffer);
-
- swTrace("send2worker[trunk_num=%d][type=%d]", buffer->trunk_num, task.data.info.type);
- }
- /**
- * unlock
- */
- SwooleTG.factory_target_worker = -1;
- SwooleTG.factory_lock_target = 0;
-
-#endif
- return SW_OK;
-}
-#endif
-
void swReactorThread_free(swServer *serv)
{
int i;
|