public
Description: ruby lang (www.ruby-lang.org) svn mirror
Homepage: http://svn.ruby-lang.org/repos/ruby/
Clone URL: git://github.com/juretta/ruby.git
Search Repo:
  * win32/win32.c (overlapped_socket_io): avoid warnings.

  * thread_win32.c (ubf_handle): refactoring.



git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18195 
b2dd03c8-39d4-4d8f-98ff-823fe69b080e
usa (author)
Thu Jul 24 00:05:49 -0700 2008
commit  3c66b8fa08fc913bd5d5879887bd20ce4027b9d6
tree    f9a829e2bd6686f6fc6cf0b08bbf6f7e025b1eda
parent  6b482c869fc24c16fa53809c6e684e8e0a76095d
...
 
 
 
 
 
 
1
2
3
...
1
2
3
4
5
6
7
8
9
0
@@ -1,3 +1,9 @@
0
+Thu Jul 24 16:05:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
0
+
0
+ * win32/win32.c (overlapped_socket_io): avoid warnings.
0
+
0
+ * thread_win32.c (ubf_handle): refactoring.
0
+
0
 Thu Jul 24 07:01:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
0
 
0
   * ext/win32ole/win32ole.c: got rid of improper casts.
...
519
520
521
522
523
524
525
526
527
528
 
529
530
 
 
531
532
 
533
534
535
...
519
520
521
 
522
523
524
525
526
 
527
528
 
529
530
531
 
532
533
534
535
0
@@ -519,17 +519,17 @@ native_thread_apply_priority(rb_thread_t *th)
0
 static void
0
 ubf_handle(void *ptr)
0
 {
0
- static int checked = 0;
0
     typedef BOOL (WINAPI *cancel_io_func_t)(HANDLE);
0
     static cancel_io_func_t cancel_func = NULL;
0
     rb_thread_t *th = (rb_thread_t *)ptr;
0
     thread_debug("ubf_handle: %p\n", th);
0
 
0
- if (!checked) {
0
+ if (!cancel_func) {
0
   cancel_func = (cancel_io_func_t)GetProcAddress(GetModuleHandle("kernel32"), "CancelSynchronousIo");
0
- checked = 1;
0
+ if (!cancel_func)
0
+ cancel_func = (cancel_io_func_t)-1;
0
     }
0
- if (cancel_func)
0
+ if (cancel_func != (cancel_io_func_t)-1)
0
   cancel_func((HANDLE)th->thread_id);
0
 
0
     w32_set_event(th->native_thread_data.interrupt_event);
...
2448
2449
2450
 
2451
2452
2453
...
2456
2457
2458
2459
2460
 
 
2461
2462
 
2463
2464
2465
2466
2467
 
 
2468
2469
 
2470
2471
2472
2473
2474
 
 
 
 
2475
2476
2477
2478
 
2479
2480
 
 
2481
 
2482
2483
2484
...
2490
2491
2492
2493
 
2494
2495
2496
...
2448
2449
2450
2451
2452
2453
2454
...
2457
2458
2459
 
 
2460
2461
2462
 
2463
2464
2465
2466
 
 
2467
2468
2469
 
2470
2471
 
2472
2473
 
2474
2475
2476
2477
2478
2479
2480
 
2481
2482
 
2483
2484
2485
2486
2487
2488
2489
...
2495
2496
2497
 
2498
2499
2500
2501
0
@@ -2448,6 +2448,7 @@ overlapped_socket_io(BOOL input, int fd, char *buf, int len, int flags,
0
   });
0
     }
0
     else {
0
+ DWORD size;
0
   wbuf.len = len;
0
   wbuf.buf = buf;
0
   memset(&wol, 0, sizeof(wol));
0
@@ -2456,29 +2457,33 @@ overlapped_socket_io(BOOL input, int fd, char *buf, int len, int flags,
0
    if (input) {
0
     flg = flags;
0
     if (addr && addrlen)
0
- ret = WSARecvFrom(s, &wbuf, 1, &r, &flg, addr, addrlen, &wol,
0
- NULL);
0
+ ret = WSARecvFrom(s, &wbuf, 1, &size, &flg, addr, addrlen,
0
+ &wol, NULL);
0
     else
0
- ret = WSARecv(s, &wbuf, 1, &r, &flg, &wol, NULL);
0
+ ret = WSARecv(s, &wbuf, 1, &size, &flg, &wol, NULL);
0
    }
0
    else {
0
     if (addr && addrlen)
0
- ret = WSASendTo(s, &wbuf, 1, &r, flags, addr, *addrlen, &wol,
0
- NULL);
0
+ ret = WSASendTo(s, &wbuf, 1, &size, flags, addr, *addrlen,
0
+ &wol, NULL);
0
     else
0
- ret = WSASend(s, &wbuf, 1, &r, flags, &wol, NULL);
0
+ ret = WSASend(s, &wbuf, 1, &size, flags, &wol, NULL);
0
    }
0
- err = WSAGetLastError();
0
   });
0
 
0
- if (ret == SOCKET_ERROR && err == WSA_IO_PENDING) {
0
+ if (ret != SOCKET_ERROR) {
0
+ r = size;
0
+ }
0
+ else if ((err = WSAGetLastError()) == WSA_IO_PENDING) {
0
    switch (rb_w32_wait_events_blocking(&wol.hEvent, 1, INFINITE)) {
0
    case WAIT_OBJECT_0:
0
     RUBY_CRITICAL(
0
- ret = WSAGetOverlappedResult(s, &wol, &r, TRUE, &flg)
0
+ ret = WSAGetOverlappedResult(s, &wol, &size, TRUE, &flg)
0
      );
0
- if (ret)
0
+ if (ret) {
0
+ r = size;
0
      break;
0
+ }
0
     /* thru */
0
    default:
0
     errno = map_errno(err);
0
@@ -2490,7 +2495,7 @@ overlapped_socket_io(BOOL input, int fd, char *buf, int len, int flags,
0
     break;
0
    }
0
   }
0
- else if (ret == SOCKET_ERROR) {
0
+ else {
0
    errno = map_errno(err);
0
    r = -1;
0
   }

Comments

    No one has commented yet.