Revision 90fc8d36 deps/liboi/oi_socket.c

View differences:

deps/liboi/oi_socket.c
11 11
#include <ev.h>
12 12
#include <oi_socket.h>
13 13

  
14
#if EV_MULTIPLICITY
15
# define SOCKET_LOOP_ socket->loop, 
16
# define SERVER_LOOP_ server->loop, 
17
#else
18
# define SOCKET_LOOP_ 
19
# define SERVER_LOOP_
20
#endif // EV_MULTIPLICITY
21

  
14 22
#if HAVE_GNUTLS
15 23
# include <gnutls/gnutls.h>
16 24
# define GNUTLS_NEED_WRITE (gnutls_record_get_direction(socket->session) == 1)
......
49 57
  socket->read_action = NULL;
50 58
  socket->write_action = NULL;
51 59

  
52
  if(socket->loop) {
53
    ev_feed_event(socket->loop, &socket->read_watcher, EV_READ);
60
  if(socket->attached) {
61
    ev_feed_event(SOCKET_LOOP_ &socket->read_watcher, EV_READ);
54 62
  }
55 63
  return OKAY;
56 64
}
......
88 96
    }  
89 97

  
90 98
    if(oi_queue_empty(&socket->out_stream)) {
91
      ev_io_stop(socket->loop, &socket->write_watcher);
99
      ev_io_stop(SOCKET_LOOP_ &socket->write_watcher);
92 100
      if(socket->on_drain)
93 101
        socket->on_drain(socket);
94 102
    }
......
160 168
  ssize_t sent;
161 169

  
162 170
  if(oi_queue_empty(&socket->out_stream)) {
163
    ev_io_stop(socket->loop, &socket->write_watcher);
171
    ev_io_stop(SOCKET_LOOP_ &socket->write_watcher);
164 172
    return AGAIN;
165 173
  }
166 174

  
......
337 345
  assert(socket->secure == FALSE);
338 346

  
339 347
  if(oi_queue_empty(&socket->out_stream)) {
340
    ev_io_stop(socket->loop, &socket->write_watcher);
348
    ev_io_stop(SOCKET_LOOP_ &socket->write_watcher);
341 349
    return AGAIN;
342 350
  }
343 351

  
......
477 485
 * Called by server->connection_watcher.
478 486
 */
479 487
static void 
480
on_connection(struct ev_loop *loop, ev_io *watcher, int revents)
488
on_connection(EV_P_ ev_io *watcher, int revents)
481 489
{
482 490
  oi_server *server = watcher->data;
483 491

  
484 492
 // printf("on connection!\n");
485 493

  
486 494
  assert(server->listening);
495
#if EV_MULTIPLICITY
487 496
  assert(server->loop == loop);
497
#endif 
488 498
  assert(&server->connection_watcher == watcher);
489 499
  
490 500
  if(EV_ERROR & revents) {
......
524 534

  
525 535
  socket->server = server;
526 536
  assign_file_descriptor(socket, fd);
527
  oi_socket_attach(socket, loop);
537
  oi_socket_attach(EV_A_ socket);
528 538
}
529 539

  
530 540
int
......
595 605
}
596 606

  
597 607
void
598
oi_server_attach (oi_server *server, struct ev_loop *loop)
608
oi_server_attach (EV_P_ oi_server *server)
599 609
{
600
  ev_io_start (loop, &server->connection_watcher);
610
  ev_io_start (EV_A_ &server->connection_watcher);
611
#if EV_MULTIPLICITY
601 612
  server->loop = loop;
613
#endif
614
  server->attached = TRUE;
602 615
}
603 616

  
604 617
void
605 618
oi_server_detach (oi_server *server)
606 619
{
607
  ev_io_stop (server->loop, &server->connection_watcher);
620
  ev_io_stop (SERVER_LOOP_ &server->connection_watcher);
621
#if EV_MULTIPLICITY
608 622
  server->loop = NULL;
623
#endif
624
  server->attached = FALSE;
609 625
}
610 626

  
611 627
void 
612 628
oi_server_init(oi_server *server, int backlog)
613 629
{
614 630
  server->backlog = backlog;
631
  server->attached = FALSE;
615 632
  server->listening = FALSE;
616 633
  server->fd = -1;
617 634
  server->connection_watcher.data = server;
......
624 641

  
625 642
/* Internal callback. called by socket->timeout_watcher */
626 643
static void 
627
on_timeout(struct ev_loop *loop, ev_timer *watcher, int revents)
644
on_timeout(EV_P_ ev_timer *watcher, int revents)
628 645
{
629 646
  oi_socket *socket = watcher->data;
630 647

  
......
652 669

  
653 670
/* Internal callback. called by socket->read_watcher */
654 671
static void 
655
on_io_event(struct ev_loop *loop, ev_io *watcher, int revents)
672
on_io_event(EV_P_ ev_io *watcher, int revents)
656 673
{
657 674
  oi_socket *socket = watcher->data;
658 675

  
......
698 715
close:
699 716
  release_write_buffer(socket);
700 717

  
701
  ev_clear_pending (socket->loop, &socket->write_watcher);
702
  ev_clear_pending (socket->loop, &socket->read_watcher);
703
  ev_clear_pending (socket->loop, &socket->timeout_watcher);
718
  ev_clear_pending (EV_A_ &socket->write_watcher);
719
  ev_clear_pending (EV_A_ &socket->read_watcher);
720
  ev_clear_pending (EV_A_ &socket->timeout_watcher);
704 721

  
705 722
  oi_socket_detach(socket);
706 723

  
......
721 738
{
722 739
  socket->fd = -1;
723 740
  socket->server = NULL;
741
#if EV_MULTIPLICITY
724 742
  socket->loop = NULL;
743
#endif
744
  socket->attached = FALSE;
725 745
  socket->connected = FALSE;
726 746

  
727 747
  oi_queue_init(&socket->out_stream);
......
765 785
      ) 
766 786
    {
767 787
      socket->write_action = secure_half_goodbye;
768
      if(socket->loop)
769
        ev_io_start(socket->loop, &socket->write_watcher);
788
      if(socket->attached)
789
        ev_io_start(SOCKET_LOOP_ &socket->write_watcher);
770 790
      return;
771 791
    }
772 792
    /* secure servers cannot handle half-closed connections? */
......
799 819
      socket->read_action = NULL;
800 820
    }
801 821

  
802
    if(socket->loop)
803
      ev_io_start(socket->loop, &socket->write_watcher);
822
    if(socket->attached)
823
      ev_io_start(SOCKET_LOOP_ &socket->write_watcher);
804 824

  
805 825
    return;
806 826
  }
......
815 835
void 
816 836
oi_socket_reset_timeout(oi_socket *socket)
817 837
{
818
  ev_timer_again(socket->loop, &socket->timeout_watcher);
838
  ev_timer_again(SOCKET_LOOP_ &socket->timeout_watcher);
819 839
}
820 840

  
821 841
/**
......
831 851
  oi_queue_insert_head(&socket->out_stream, &buf->queue);
832 852

  
833 853
  buf->written = 0;
834
  ev_io_start(socket->loop, &socket->write_watcher);
854
  // XXX if (socket->attached)   ??
855
  ev_io_start(SOCKET_LOOP_ &socket->write_watcher);
835 856
}
836 857

  
837 858
static void
......
856 877
}
857 878

  
858 879
void
859
oi_socket_attach(oi_socket *socket, struct ev_loop *loop)
880
oi_socket_attach(EV_P_ oi_socket *socket)
860 881
{
882
#if EV_MULTIPLICITY
861 883
  socket->loop = loop;
884
#endif 
885
  socket->attached = TRUE;
862 886

  
863
  ev_timer_again(loop, &socket->timeout_watcher);
887
  ev_timer_again(EV_A_ &socket->timeout_watcher);
864 888

  
865 889
  if(socket->read_action) 
866
    ev_io_start(loop, &socket->read_watcher);
890
    ev_io_start(EV_A_ &socket->read_watcher);
867 891

  
868 892
  if(socket->write_action) 
869
    ev_io_start(loop, &socket->write_watcher);
893
    ev_io_start(EV_A_ &socket->write_watcher);
870 894

  
871 895
  /* make sure the io_event happens soon  in the case we're being reattached */
872
  ev_feed_event(loop, &socket->read_watcher, EV_READ);
896
  ev_feed_event(EV_A_ &socket->read_watcher, EV_READ);
873 897
}
874 898

  
875 899
void
876 900
oi_socket_detach(oi_socket *socket)
877 901
{
878
  if(socket->loop) {
879
    ev_io_stop(socket->loop, &socket->write_watcher);
880
    ev_io_stop(socket->loop, &socket->read_watcher);
881
    ev_timer_stop(socket->loop, &socket->timeout_watcher);
902
  if(socket->attached) {
903
    ev_io_stop(SOCKET_LOOP_ &socket->write_watcher);
904
    ev_io_stop(SOCKET_LOOP_ &socket->read_watcher);
905
    ev_timer_stop(SOCKET_LOOP_ &socket->timeout_watcher);
906
#if EV_MULTIPLICITY
882 907
    socket->loop = NULL;
908
#endif
909
    socket->attached = FALSE;
883 910
  }
884 911
}
885 912

  
886 913
void
887 914
oi_socket_read_stop (oi_socket *socket)
888 915
{
889
  ev_io_stop(socket->loop, &socket->read_watcher);
890
  ev_clear_pending (socket->loop, &socket->read_watcher);
916
  ev_io_stop(SOCKET_LOOP_ &socket->read_watcher);
917
  ev_clear_pending (SOCKET_LOOP_ &socket->read_watcher);
891 918
}
892 919

  
893 920
void
894 921
oi_socket_read_start (oi_socket *socket)
895 922
{
896 923
  if(socket->read_action) {
897
    ev_io_start(socket->loop, &socket->read_watcher);
924
    ev_io_start(SOCKET_LOOP_ &socket->read_watcher);
898 925
    /* XXX feed event? */
899 926
  }
900 927
}

Also available in: Unified diff