diff --git a/acl_cpp_vc2012.sln b/acl_cpp_vc2012.sln
index b472ac23b..2e533249b 100644
--- a/acl_cpp_vc2012.sln
+++ b/acl_cpp_vc2012.sln
@@ -726,9 +726,6 @@ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fiber", "lib_fiber\samples\fiber\fiber_vc2012.vcxproj", "{BFCE4280-B6E5-414A-A8CD-F827A4A19B6F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinEchod", "lib_fiber\samples\WinEchod\WinEchod.vcxproj", "{F74A61AD-A309-47A5-A7C6-BAC888660BBC}"
- ProjectSection(ProjectDependencies) = postProject
- {34506C5D-E131-43BB-9656-BA39F0B56485} = {34506C5D-E131-43BB-9656-BA39F0B56485}
- EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/lib_fiber/c/src/event/event_wmsg.c b/lib_fiber/c/src/event/event_wmsg.c
index 029544aba..08fb2c676 100644
--- a/lib_fiber/c/src/event/event_wmsg.c
+++ b/lib_fiber/c/src/event/event_wmsg.c
@@ -12,10 +12,10 @@
#define WM_SOCKET_NOTIFY (WM_USER + 8192)
typedef struct EVENT_WMSG {
- EVENT event;
- UINT nMsg;
- HWND hWnd;
- HINSTANCE hInstance;
+ EVENT event;
+ UINT nMsg;
+ HWND hWnd;
+ HINSTANCE hInstance;
const char *class_name;
FILE_EVENT **files;
int size;
@@ -141,7 +141,7 @@ static int wmsg_del_read(EVENT_WMSG *ev, FILE_EVENT *fe)
if (fe->mask & EVENT_WRITE) {
lEvent = FD_CLOSE | FD_WRITE;
} else {
- lEvent = 0;
+ lEvent = FD_CLOSE;
}
fe->mask &= ~EVENT_READ;
@@ -191,46 +191,23 @@ static int wmsg_wait(EVENT *ev, int timeout)
if (!res) {
return 0;
}
-
- do {
+ //if (msg.message != WM_TIMER || msg.hwnd != NULL || msg.wParam != id) {
TranslateMessage(&msg);
DispatchMessage(&msg);
- } while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE));
+ //}
+ return 0;
+ while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
return 0;
}
-static int wmsg_handle(EVENT *ev)
-{
- (void) ev;
- return -1;
-}
-
-static const char *wmsg_name(void)
-{
- return "wmsg";
-}
-
-static void onClose(EVENT_WMSG *ev, SOCKET fd)
-{
- FILE_EVENT *fe = wmsg_fdmap_get(ev, fd);
- if (fe == NULL) {
- /* don nothing */
- } else if (fe->mask & EVENT_READ) {
- if (fe->r_proc) {
- fe->r_proc(&ev->event, fe);
- }
- } else if (fe->mask & EVENT_WRITE) {
- if (fe->w_proc) {
- fe->w_proc(&ev->event, fe);
- }
- }
-}
-
static void onRead(EVENT_WMSG *ev, SOCKET fd)
{
FILE_EVENT *fe = wmsg_fdmap_get(ev, fd);
- if (fe == NULL) {
+ if (fe == NULL || fe->oper & EVENT_DEL_READ) {
msg_error("%s(%d): no FILE_EVENT, fd=%d",
__FUNCTION__, __LINE__, fd);
} else if (fe->r_proc == NULL) {
@@ -259,7 +236,7 @@ static void onAccept(EVENT_WMSG *ev, SOCKET fd)
{
FILE_EVENT *fe = wmsg_fdmap_get(ev, fd);
if (fe == NULL) {
- msg_fatal("%s(%d): no FILE_EVENT, fd=%d",
+ msg_error("%s(%d): no FILE_EVENT, fd=%d",
__FUNCTION__, __LINE__, fd);
} else if (fe->r_proc == NULL) {
msg_fatal("%s(%d): r_proc NULL, fd=%d",
@@ -274,6 +251,22 @@ static void onConnect(EVENT_WMSG *ev, SOCKET fd)
onWrite(ev, fd);
}
+static void onClose(EVENT_WMSG *ev, SOCKET fd)
+{
+ FILE_EVENT *fe = wmsg_fdmap_get(ev, fd);
+ if (fe == NULL) {
+ /* don nothing */
+ } else if (fe->mask & EVENT_READ) {
+ if (fe->r_proc) {
+ fe->r_proc(&ev->event, fe);
+ }
+ } else if (fe->mask & EVENT_WRITE) {
+ if (fe->w_proc) {
+ fe->w_proc(&ev->event, fe);
+ }
+ }
+}
+
static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
EVENT_WMSG *ev = get_hwnd_event(hWnd);
@@ -390,7 +383,19 @@ static HWND CreateSockWindow(const char *class_name, HINSTANCE hInstance)
return InitInstance(class_name, hInstance);
}
+static int wmsg_handle(EVENT *ev)
+{
+ (void) ev;
+ return -1;
+}
+
+static const char *wmsg_name(void)
+{
+ return "wmsg";
+}
+
static const char *__class_name = "__AclFiberEventsMainWClass";
+
EVENT *event_wmsg_create(int size)
{
EVENT_WMSG *ew = (EVENT_WMSG *) calloc(1, sizeof(EVENT_WMSG));
diff --git a/lib_fiber/c/src/fiber/fiber_win.c b/lib_fiber/c/src/fiber/fiber_win.c
index e852b1160..45672eccc 100644
--- a/lib_fiber/c/src/fiber/fiber_win.c
+++ b/lib_fiber/c/src/fiber/fiber_win.c
@@ -16,11 +16,6 @@ static void fiber_win_free(ACL_FIBER *fiber)
stack_free(fb);
}
-static void fiber_win_init(ACL_FIBER *fiber, size_t size)
-{
-
-}
-
static void fiber_win_swap(ACL_FIBER *from, ACL_FIBER *to)
{
FIBER_WIN *fb_to = (FIBER_WIN *) to;
@@ -33,17 +28,25 @@ static void __stdcall fiber_win_start(LPVOID ctx)
fb->fiber.start_fn(&fb->fiber);
}
+static void fiber_win_init(FIBER_WIN *fb, size_t size)
+{
+ if (fb->context) {
+ DeleteFiber(fb->context);
+ }
+ fb->context = CreateFiberEx(size, 0, FIBER_FLAG_FLOAT_SWITCH,
+ fiber_win_start, fb);
+}
+
ACL_FIBER *fiber_win_alloc(void(*start_fn)(ACL_FIBER *), size_t size)
{
FIBER_WIN *fb = (FIBER_WIN *) calloc(1, sizeof(*fb));
- fb->fiber.init_fn = fiber_win_init;
- fb->fiber.free_fn = fiber_win_free;
- fb->fiber.swap_fn = (void(*)(ACL_FIBER*, ACL_FIBER*)) fiber_win_swap;
+ fb->fiber.init_fn = (void (*)(ACL_FIBER*, size_t)) fiber_win_init;
+ fb->fiber.free_fn = fiber_win_free;
+ fb->fiber.swap_fn = (void (*)(ACL_FIBER*, ACL_FIBER*)) fiber_win_swap;
fb->fiber.start_fn = start_fn;
+ fb->context = NULL;
- fb->context = CreateFiberEx(size, 0, FIBER_FLAG_FLOAT_SWITCH,
- fiber_win_start, fb);
return (ACL_FIBER *) fb;
}
diff --git a/lib_fiber/samples/WinEchod/FiberClient.cpp b/lib_fiber/samples/WinEchod/FiberClient.cpp
index 18e789db3..8de9bf498 100644
--- a/lib_fiber/samples/WinEchod/FiberClient.cpp
+++ b/lib_fiber/samples/WinEchod/FiberClient.cpp
@@ -24,7 +24,7 @@ void CFiberClient::run(void)
break;
}
buf[ret] = 0;
- printf("recv=%d, [%s]\r\n", ret, buf);
+ //printf("recv=%d, [%s]\r\n", ret, buf);
if (fiber_send(sock, buf, ret, 0) == -1)
{
printf("write error %s\r\n", acl::last_serror());
diff --git a/lib_fiber/samples/WinEchod/WinEchod.vcxproj b/lib_fiber/samples/WinEchod/WinEchod.vcxproj
index 1ce3324fa..69f2632b0 100644
--- a/lib_fiber/samples/WinEchod/WinEchod.vcxproj
+++ b/lib_fiber/samples/WinEchod/WinEchod.vcxproj
@@ -43,6 +43,7 @@
true
+ .\
false
diff --git a/lib_fiber/samples/WinEchod/WinEchodDlg.cpp b/lib_fiber/samples/WinEchod/WinEchodDlg.cpp
index 10d069405..c5f3db104 100644
--- a/lib_fiber/samples/WinEchod/WinEchodDlg.cpp
+++ b/lib_fiber/samples/WinEchod/WinEchodDlg.cpp
@@ -1,4 +1,3 @@
-
// WinEchodDlg.cpp : ʵÏÖÎļþ
//