~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/drizzled.cc

  • Committer: Brian Aker
  • Date: 2009-04-16 03:15:19 UTC
  • mfrom: (971.3.30 eday-dev)
  • Revision ID: brian@gaz-20090416031519-ra93wryb2fdb8fko
OSX shutdown fix

Show diffs side-by-side

added added

removed removed

Lines of Context:
246
246
bool opt_endinfo, using_udf_functions;
247
247
bool locked_in_memory;
248
248
bool volatile abort_loop;
 
249
int abort_pipe[2];
249
250
bool volatile shutdown_in_progress;
250
251
uint32_t max_used_connections;
251
252
const char *opt_scheduler= "multi_thread";
446
447
 
447
448
void close_connections(void)
448
449
{
449
 
  int x;
450
 
 
451
450
  /* Abort listening to new connections */
452
 
  for (x= 0; x < pollfd_count; x++)
453
 
  {
454
 
    if (fds[x].fd != -1)
455
 
    {
456
 
      (void) shutdown(fds[x].fd, SHUT_RDWR);
457
 
      (void) close(fds[x].fd);
458
 
      fds[x].fd= -1;
459
 
    }
460
 
  }
461
 
 
 
451
  assert(write(abort_pipe[1], "\0", 1) == 1);
462
452
 
463
453
  /* kill connection thread */
464
454
  (void) pthread_mutex_lock(&LOCK_thread_count);
806
796
  struct addrinfo *next;
807
797
  struct addrinfo hints;
808
798
  int error;
 
799
  int ip_sock;
809
800
 
810
801
  set_ports();
811
802
 
822
813
    unireg_abort(1);                            /* purecov: tested */
823
814
  }
824
815
 
825
 
  for (next= ai, pollfd_count= 0; next; next= next->ai_next, pollfd_count++)
 
816
  for (next= ai, pollfd_count= 0; next; next= next->ai_next)
826
817
  {
827
 
    int ip_sock;
828
 
 
829
818
    ip_sock= socket(next->ai_family, next->ai_socktype, next->ai_protocol);
830
 
 
831
819
    if (ip_sock == -1)
832
820
    {
833
 
      sql_perror(ER(ER_IPSOCK_ERROR));          /* purecov: tested */
834
 
      unireg_abort(1);                          /* purecov: tested */
 
821
      /* getaddrinfo can return bad results, skip them here and error later if
 
822
         we didn't find anything to bind to. */
 
823
      continue;
835
824
    }
836
825
 
837
826
    fds[pollfd_count].fd= ip_sock;
838
827
    fds[pollfd_count].events= POLLIN | POLLERR;
 
828
    pollfd_count++;
839
829
 
840
830
    /* Add options for our listening socket */
841
831
    {
914
904
    }
915
905
  }
916
906
 
 
907
  if (pollfd_count == 0 && ai != NULL)
 
908
  {
 
909
    sql_perror(ER(ER_IPSOCK_ERROR));            /* purecov: tested */
 
910
    unireg_abort(1);                            /* purecov: tested */
 
911
  }
 
912
 
917
913
  freeaddrinfo(ai);
 
914
 
 
915
  /* We need a pipe to wakeup the listening thread since some operating systems
 
916
     are stupid. *cough* OSX *cough* */
 
917
  if (pipe(abort_pipe) == -1)
 
918
  {
 
919
    sql_perror(_("Can't open abort pipet"));
 
920
    errmsg_printf(ERRMSG_LVL_ERROR,
 
921
                  _("pipe() on abort_pipe failed with error %d"), errno);
 
922
    unireg_abort(1);
 
923
  }
 
924
 
 
925
  fds[pollfd_count].fd= abort_pipe[0];
 
926
  fds[pollfd_count].events= POLLIN | POLLERR;
 
927
  pollfd_count++; 
 
928
 
918
929
  return;
919
930
}
920
931
 
1970
1981
 
1971
1982
    create_new_thread(session);
1972
1983
  }
 
1984
 
 
1985
  for (x= 0; x < pollfd_count; x++)
 
1986
  {
 
1987
    if (fds[x].fd != -1)
 
1988
    {
 
1989
      (void) shutdown(fds[x].fd, SHUT_RDWR);
 
1990
      (void) close(fds[x].fd);
 
1991
      fds[x].fd= -1;
 
1992
    }
 
1993
  }
 
1994
 
 
1995
  /* abort_pipe[0] was closed in the for loop above in fds[] */
 
1996
  (void) close(abort_pipe[1]);
1973
1997
}
1974
1998
 
1975
1999