summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/mini_client.cc19
-rw-r--r--sql/mysqld.cc8
-rw-r--r--sql/sql_repl.cc3
-rw-r--r--sql/stacktrace.c10
-rw-r--r--sql/stacktrace.h7
-rw-r--r--sql/violite.c14
6 files changed, 35 insertions, 26 deletions
diff --git a/sql/mini_client.cc b/sql/mini_client.cc
index 88a02e227a3..3a2305aa69c 100644
--- a/sql/mini_client.cc
+++ b/sql/mini_client.cc
@@ -23,10 +23,23 @@
*/
#define DONT_USE_RAID
-#if defined(__WIN__) || defined(WIN32)
+#if defined(__WIN__)
#include <winsock.h>
#include <odbcinst.h>
+/* Disable alarms */
+typedef my_bool ALARM;
+#define thr_alarm_init(A) (*(A))=0
+#define thr_alarm_in_use(A) (*(A))
+#define thr_end_alarm(A)
+#define thr_alarm(A,B,C) local_thr_alarm((A),(B),(C))
+inline int local_thr_alarm(my_bool *A,int B __attribute__((unused)),ALARM *C __attribute__((unused)))
+{
+ *A=1;
+ return 0;
+}
+#define thr_got_alarm(A) 0
#endif
+
#include <global.h>
#include <my_sys.h>
#include <mysys_err.h>
@@ -62,7 +75,7 @@ extern "C" { // Because of SCO 3.2V4.2
#ifdef HAVE_SYS_UN_H
# include <sys/un.h>
#endif
-#if defined(THREAD) && !defined(__WIN__)
+#if defined(THREAD)
#include <my_pthread.h> /* because of signal() */
#include <thr_alarm.h>
#endif
@@ -486,9 +499,7 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
uint pkt_length;
NET *net= &mysql->net;
thr_alarm_t alarmed;
-#if !defined(__WIN__)
ALARM alarm_buff;
-#endif
#ifdef __WIN__
HANDLE hPipe=INVALID_HANDLE_VALUE;
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 35aeaecc6e1..b484eee3480 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -1247,12 +1247,14 @@ static void init_signals(void)
sigset(THR_KILL_SIGNAL,end_thread_signal);
sigset(THR_SERVER_ALARM,print_signal_warning); // Should never be called!
- struct sigaction sa; sa.sa_flags = 0;
- sigemptyset(&sa.sa_mask);
- sigprocmask(SIG_SETMASK,&sa.sa_mask,NULL);
if (!(test_flags & TEST_NO_STACKTRACE) || (test_flags & TEST_CORE_ON_SIGNAL))
{
+ struct sigaction sa;
+ sa.sa_flags = SA_RESETHAND | SA_NODEFER;
+ sigemptyset(&sa.sa_mask);
+ sigprocmask(SIG_SETMASK,&sa.sa_mask,NULL);
+
init_stacktrace();
sa.sa_handler=handle_segfault;
sigaction(SIGSEGV, &sa, NULL);
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index 32c4c5c6509..b9ba284ab27 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -620,6 +620,9 @@ int stop_slave(THD* thd, bool net_report )
#ifdef HAVE_TIMESPEC_TS_SEC
abstime.ts_sec=time(NULL)+2;
abstime.ts_nsec=0;
+#elif defined(__WIN__)
+ abstime.tv_sec=time((time_t*) 0)+2;
+ abstime.tv_nsec=0;
#else
struct timeval tv;
gettimeofday(&tv,0);
diff --git a/sql/stacktrace.c b/sql/stacktrace.c
index ab1113f74cf..408006dac93 100644
--- a/sql/stacktrace.c
+++ b/sql/stacktrace.c
@@ -205,11 +205,17 @@ resolve it\n");
/* Produce a core for the thread */
-#ifdef HAVE_WRITE_CORE
+#ifdef HAVE_LINUXTHREADS
void write_core(int sig)
{
signal(sig, SIG_DFL);
if (fork() != 0) exit(1); // Abort main program
// Core will be written at exit
}
-#endif /* HAVE_WRITE_CORE */
+#else
+void write_core(int sig)
+{
+ signal(sig, SIG_DFL);
+ pthread_kill(pthread_self(), sig);
+}
+#endif
diff --git a/sql/stacktrace.h b/sql/stacktrace.h
index b6c0ec43a0f..980e1ea07eb 100644
--- a/sql/stacktrace.h
+++ b/sql/stacktrace.h
@@ -30,9 +30,6 @@ extern char* heap_start;
void print_stacktrace(gptr stack_bottom, ulong thread_stack);
void safe_print_str(const char* name, const char* val, int max_len);
#endif /* (defined (__i386__) || (defined(__alpha__) && defined(__GNUC__))) */
-
-#define HAVE_WRITE_CORE
-void write_core(int sig);
#endif /* HAVE_LINUXTHREADS */
/* Define empty prototypes for functions that are not implemented */
@@ -42,9 +39,7 @@ void write_core(int sig);
#define safe_print_str(A,B,C) {}
#endif /* HAVE_STACKTRACE */
-#ifndef HAVE_WRITE_CORE
-#define write_core(A) {}
-#endif
+void write_core(int sig);
#ifdef __cplusplus
}
diff --git a/sql/violite.c b/sql/violite.c
index aff4224e5a3..0d96c71969c 100644
--- a/sql/violite.c
+++ b/sql/violite.c
@@ -44,18 +44,10 @@
#endif /* defined(__EMX__) */
#if defined(MSDOS) || defined(__WIN__)
-#ifdef __WIN__
-#undef errno
-#undef EINTR
-#undef EAGAIN
-#define errno WSAGetLastError()
-#define EINTR WSAEINTR
-#define EAGAIN WSAEINPROGRESS
-#endif /* __WIN__ */
#define O_NONBLOCK 1 /* For emulation of fcntl() */
#endif
#ifndef EWOULDBLOCK
-#define EWOULDBLOCK EAGAIN
+#define SOCKET_EWOULDBLOCK SOCKET_EAGAIN
#endif
#ifndef __WIN__
@@ -327,8 +319,8 @@ int vio_keepalive(Vio* vio, my_bool set_keep_alive)
my_bool
vio_should_retry(Vio * vio __attribute__((unused)))
{
- int en = errno;
- return en == EAGAIN || en == EINTR || en == EWOULDBLOCK;
+ int en = socket_errno;
+ return en == SOCKET_EAGAIN || en == SOCKET_EINTR || en == SOCKET_EWOULDBLOCK;
}