Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
4abc2dd0
Commit
4abc2dd0
authored
May 26, 2017
by
Marko Mäkelä
Browse files
Options
Browse Files
Download
Plain Diff
Merge 10.0 to 10.1
parents
6bc99492
449a88e1
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
168 additions
and
180 deletions
+168
-180
mysql-test/suite/innodb/r/drop_table_background.result
mysql-test/suite/innodb/r/drop_table_background.result
+9
-0
mysql-test/suite/innodb/t/drop_table_background.test
mysql-test/suite/innodb/t/drop_table_background.test
+30
-0
sql/CMakeLists.txt
sql/CMakeLists.txt
+11
-4
storage/innobase/srv/srv0srv.cc
storage/innobase/srv/srv0srv.cc
+59
-88
storage/xtradb/srv/srv0srv.cc
storage/xtradb/srv/srv0srv.cc
+59
-88
No files found.
mysql-test/suite/innodb/r/drop_table_background.result
0 → 100644
View file @
4abc2dd0
CREATE TABLE t(c0 SERIAL, c1 INT, c2 INT, c3 INT, c4 INT,
KEY(c1), KEY(c2), KEY(c2,c1),
KEY(c3), KEY(c3,c1), KEY(c3,c2), KEY(c3,c2,c1),
KEY(c4), KEY(c4,c1), KEY(c4,c2), KEY(c4,c2,c1),
KEY(c4,c3), KEY(c4,c3,c1), KEY(c4,c3,c2), KEY(c4,c3,c2,c1)) ENGINE=InnoDB;
SET DEBUG_DBUG='+d,row_drop_table_add_to_background';
DROP TABLE t;
CREATE TABLE t (a INT) ENGINE=InnoDB;
DROP TABLE t;
mysql-test/suite/innodb/t/drop_table_background.test
0 → 100644
View file @
4abc2dd0
--
source
include
/
have_innodb
.
inc
--
source
include
/
have_debug
.
inc
# Embedded server does not support restarting
--
source
include
/
not_embedded
.
inc
CREATE
TABLE
t
(
c0
SERIAL
,
c1
INT
,
c2
INT
,
c3
INT
,
c4
INT
,
KEY
(
c1
),
KEY
(
c2
),
KEY
(
c2
,
c1
),
KEY
(
c3
),
KEY
(
c3
,
c1
),
KEY
(
c3
,
c2
),
KEY
(
c3
,
c2
,
c1
),
KEY
(
c4
),
KEY
(
c4
,
c1
),
KEY
(
c4
,
c2
),
KEY
(
c4
,
c2
,
c1
),
KEY
(
c4
,
c3
),
KEY
(
c4
,
c3
,
c1
),
KEY
(
c4
,
c3
,
c2
),
KEY
(
c4
,
c3
,
c2
,
c1
))
ENGINE
=
InnoDB
;
let
$n
=
10
;
SET
DEBUG_DBUG
=
'+d,row_drop_table_add_to_background'
;
--
disable_query_log
let
$i
=
$n
;
while
(
$i
)
{
eval
CREATE
TABLE
t
$i
LIKE
t
;
dec
$i
;
}
let
$i
=
$n
;
while
(
$i
)
{
eval
DROP
TABLE
t
$i
;
dec
$i
;
}
--
enable_query_log
DROP
TABLE
t
;
--
source
include
/
restart_mysqld
.
inc
CREATE
TABLE
t
(
a
INT
)
ENGINE
=
InnoDB
;
DROP
TABLE
t
;
sql/CMakeLists.txt
View file @
4abc2dd0
...
...
@@ -60,15 +60,22 @@ SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES}
# Gen_lex_token
# Make sure sql_yacc.h is generated before compiling gen_lex_token
IF
(
NOT CMAKE_GENERATOR MATCHES
"Visual Studio"
)
SET
(
DEPENDS_gen_lex_token DEPENDS gen_lex_token
)
SET
(
DEPENDS_gen_lex_hash DEPENDS gen_lex_hash
)
ENDIF
()
IF
(
NOT CMAKE_CROSSCOMPILING
)
ADD_EXECUTABLE
(
gen_lex_token gen_lex_token.cc
)
ADD_DEPENDENCIES
(
gen_lex_token GenServerSource
)
ADD_EXECUTABLE
(
gen_lex_token gen_lex_token.cc
${
CMAKE_CURRENT_BINARY_DIR
}
/sql_yacc.h
)
ENDIF
()
ADD_CUSTOM_COMMAND
(
OUTPUT
${
CMAKE_CURRENT_BINARY_DIR
}
/lex_token.h
COMMAND gen_lex_token > lex_token.h
DEPENDS gen_lex_token
${
DEPENDS_gen_lex_token
}
)
ADD_DEFINITIONS
(
-DMYSQL_SERVER -DHAVE_EVENT_SCHEDULER
)
...
...
@@ -323,7 +330,7 @@ ENDIF()
ADD_CUSTOM_COMMAND
(
OUTPUT
${
CMAKE_CURRENT_BINARY_DIR
}
/lex_hash.h
COMMAND gen_lex_hash > lex_hash.h
DEPENDS gen_lex_hash
${
DEPENDS_gen_lex_hash
}
)
MYSQL_ADD_EXECUTABLE
(
mysql_tzinfo_to_sql tztime.cc COMPONENT Server
)
...
...
storage/innobase/srv/srv0srv.cc
View file @
4abc2dd0
...
...
@@ -1835,7 +1835,7 @@ DECLARE_THREAD(srv_monitor_thread)(void*)
}
}
if
(
srv_shutdown_state
>=
SRV_SHUTDOWN_CLEANUP
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
goto
exit_func
;
}
...
...
@@ -1973,7 +1973,7 @@ DECLARE_THREAD(srv_error_monitor_thread)(void*)
os_event_wait_time_low
(
srv_error_event
,
1000000
,
sig_count
);
if
(
srv_shutdown_state
<
SRV_SHUTDOWN_CLEANUP
)
{
if
(
srv_shutdown_state
==
SRV_SHUTDOWN_NONE
)
{
goto
loop
;
}
...
...
@@ -2199,7 +2199,7 @@ srv_shutdown_print_master_pending(
time_elapsed
=
ut_difftime
(
current_time
,
*
last_print_time
);
if
(
time_elapsed
>
60
)
{
*
last_print_time
=
ut_time
()
;
*
last_print_time
=
current_time
;
if
(
n_tables_to_drop
)
{
ut_print_timestamp
(
stderr
);
...
...
@@ -2252,7 +2252,7 @@ srv_master_do_active_tasks(void)
MONITOR_INC_TIME_IN_MICRO_SECS
(
MONITOR_SRV_BACKGROUND_DROP_TABLE_MICROSECOND
,
counter_time
);
if
(
srv_shutdown_state
>
0
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
return
;
}
...
...
@@ -2286,11 +2286,7 @@ srv_master_do_active_tasks(void)
MONITOR_SRV_MEM_VALIDATE_MICROSECOND
,
counter_time
);
}
#endif
if
(
srv_shutdown_state
>
0
)
{
return
;
}
if
(
srv_shutdown_state
>
0
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
return
;
}
...
...
@@ -2303,7 +2299,7 @@ srv_master_do_active_tasks(void)
MONITOR_SRV_DICT_LRU_MICROSECOND
,
counter_time
);
}
if
(
srv_shutdown_state
>
0
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
return
;
}
...
...
@@ -2347,7 +2343,7 @@ srv_master_do_idle_tasks(void)
MONITOR_SRV_BACKGROUND_DROP_TABLE_MICROSECOND
,
counter_time
);
if
(
srv_shutdown_state
>
0
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
return
;
}
...
...
@@ -2363,7 +2359,7 @@ srv_master_do_idle_tasks(void)
MONITOR_INC_TIME_IN_MICRO_SECS
(
MONITOR_SRV_IBUF_MERGE_MICROSECOND
,
counter_time
);
if
(
srv_shutdown_state
>
0
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
return
;
}
...
...
@@ -2379,7 +2375,7 @@ srv_master_do_idle_tasks(void)
MONITOR_INC_TIME_IN_MICRO_SECS
(
MONITOR_SRV_LOG_FLUSH_MICROSECOND
,
counter_time
);
if
(
srv_shutdown_state
>
0
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
return
;
}
...
...
@@ -2390,70 +2386,42 @@ srv_master_do_idle_tasks(void)
counter_time
);
}
/*********************************************************************//**
Perform the tasks during shutdown. The tasks that we do at shutdown
depend on srv_fast_shutdown:
2 => very fast shutdown => do no book keeping
1 => normal shutdown => clear drop table queue and make checkpoint
0 => slow shutdown => in addition to above do complete purge and ibuf
merge
@return TRUE if some work was done. FALSE otherwise */
/** Perform shutdown tasks.
@param[in] ibuf_merge whether to complete the change buffer merge */
static
ibool
srv_master_do_shutdown_tasks
(
/*=========================*/
ib_time_t
*
last_print_time
)
/*!< last time the function
print the message */
void
srv_shutdown
(
bool
ibuf_merge
)
{
ulint
n_bytes_merged
=
0
;
ulint
n_tables_to_drop
=
0
;
ut_ad
(
!
srv_read_only_mode
);
++
srv_main_shutdown_loops
;
ut_a
(
srv_shutdown_state
>
0
);
/* In very fast shutdown none of the following is necessary */
if
(
srv_fast_shutdown
==
2
)
{
return
(
FALSE
);
}
/* ALTER TABLE in MySQL requires on Unix that the table handler
can drop tables lazily after there no longer are SELECT
queries to them. */
srv_main_thread_op_info
=
"doing background drop tables"
;
n_tables_to_drop
=
row_drop_tables_for_mysql_in_background
();
/* make sure that there is enough reusable space in the redo
log files */
srv_main_thread_op_info
=
"checking free log space"
;
log_free_check
();
ulint
n_bytes_merged
=
0
;
ulint
n_tables_to_drop
;
ib_time_t
now
=
ut_time
();
/* In case of normal shutdown we don't do ibuf merge or purge */
if
(
srv_fast_shutdown
==
1
)
{
goto
func_exit
;
}
/* Do an ibuf merge */
srv_main_thread_op_info
=
"doing insert buffer merge"
;
n_bytes_merged
=
ibuf_merge_in_background
(
true
);
/* Flush logs if needed */
srv_sync_log_buffer_in_background
();
func_exit:
/* Make a new checkpoint about once in 10 seconds */
srv_main_thread_op_info
=
"making checkpoint"
;
log_checkpoint
(
TRUE
,
FALSE
);
/* Print progress message every 60 seconds during shutdown */
if
(
srv_shutdown_state
>
0
&&
srv_print_verbose_log
)
{
srv_shutdown_print_master_pending
(
last_print_time
,
n_tables_to_drop
,
n_bytes_merged
);
}
do
{
ut_ad
(
!
srv_read_only_mode
);
ut_ad
(
srv_shutdown_state
==
SRV_SHUTDOWN_CLEANUP
);
++
srv_main_shutdown_loops
;
/* FIXME: Remove the background DROP TABLE queue; it is not
crash-safe and breaks ACID. */
srv_main_thread_op_info
=
"doing background drop tables"
;
n_tables_to_drop
=
row_drop_tables_for_mysql_in_background
();
if
(
ibuf_merge
)
{
srv_main_thread_op_info
=
"checking free log space"
;
log_free_check
();
srv_main_thread_op_info
=
"doing insert buffer merge"
;
n_bytes_merged
=
ibuf_merge_in_background
(
true
);
/* Flush logs if needed */
srv_sync_log_buffer_in_background
();
}
return
(
n_bytes_merged
||
n_tables_to_drop
);
/* Print progress message every 60 seconds during shutdown */
if
(
srv_print_verbose_log
)
{
srv_shutdown_print_master_pending
(
&
now
,
n_tables_to_drop
,
n_bytes_merged
);
}
}
while
(
n_bytes_merged
||
n_tables_to_drop
);
}
/*********************************************************************//**
...
...
@@ -2485,7 +2453,6 @@ DECLARE_THREAD(srv_master_thread)(
srv_slot_t
*
slot
;
ulint
old_activity_count
=
srv_get_activity_count
();
ib_time_t
last_print_time
;
ut_ad
(
!
srv_read_only_mode
);
...
...
@@ -2504,7 +2471,6 @@ DECLARE_THREAD(srv_master_thread)(
slot
=
srv_reserve_slot
(
SRV_MASTER
);
ut_a
(
slot
==
srv_sys
.
sys_threads
);
last_print_time
=
ut_time
();
loop
:
if
(
srv_force_recovery
>=
SRV_FORCE_NO_BACKGROUND
)
{
goto
suspend_thread
;
...
...
@@ -2524,13 +2490,26 @@ DECLARE_THREAD(srv_master_thread)(
}
}
while
(
srv_master_do_shutdown_tasks
(
&
last_print_time
))
{
/* Shouldn't loop here in case of very fast shutdown */
ut_ad
(
srv_fast_shutdown
<
2
);
suspend_thread
:
switch
(
srv_shutdown_state
)
{
case
SRV_SHUTDOWN_NONE
:
break
;
case
SRV_SHUTDOWN_FLUSH_PHASE
:
case
SRV_SHUTDOWN_LAST_PHASE
:
ut_ad
(
0
);
/* fall through */
case
SRV_SHUTDOWN_EXIT_THREADS
:
/* srv_init_abort() must have been invoked */
case
SRV_SHUTDOWN_CLEANUP
:
if
(
srv_shutdown_state
==
SRV_SHUTDOWN_CLEANUP
&&
srv_fast_shutdown
<
2
)
{
srv_shutdown
(
srv_fast_shutdown
==
1
);
}
srv_suspend_thread
(
slot
);
my_thread_end
();
os_thread_exit
(
NULL
);
}
suspend_thread
:
srv_main_thread_op_info
=
"suspending"
;
srv_suspend_thread
(
slot
);
...
...
@@ -2542,15 +2521,7 @@ DECLARE_THREAD(srv_master_thread)(
srv_main_thread_op_info
=
"waiting for server activity"
;
srv_resume_thread
(
slot
);
if
(
srv_shutdown_state
==
SRV_SHUTDOWN_EXIT_THREADS
)
{
my_thread_end
();
os_thread_exit
(
NULL
);
}
goto
loop
;
OS_THREAD_DUMMY_RETURN
;
/* Not reached, avoid compiler warning */
}
/*********************************************************************//**
...
...
storage/xtradb/srv/srv0srv.cc
View file @
4abc2dd0
...
...
@@ -2280,7 +2280,7 @@ DECLARE_THREAD(srv_monitor_thread)(void*)
}
}
if
(
srv_shutdown_state
>=
SRV_SHUTDOWN_CLEANUP
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
goto
exit_func
;
}
...
...
@@ -2418,7 +2418,7 @@ DECLARE_THREAD(srv_error_monitor_thread)(void*)
os_event_wait_time_low
(
srv_error_event
,
1000000
,
sig_count
);
if
(
srv_shutdown_state
<
SRV_SHUTDOWN_CLEANUP
)
{
if
(
srv_shutdown_state
==
SRV_SHUTDOWN_NONE
)
{
goto
loop
;
}
...
...
@@ -2863,7 +2863,7 @@ srv_shutdown_print_master_pending(
time_elapsed
=
ut_difftime
(
current_time
,
*
last_print_time
);
if
(
time_elapsed
>
60
)
{
*
last_print_time
=
ut_time
()
;
*
last_print_time
=
current_time
;
if
(
n_tables_to_drop
)
{
ut_print_timestamp
(
stderr
);
...
...
@@ -2916,7 +2916,7 @@ srv_master_do_active_tasks(void)
MONITOR_INC_TIME_IN_MICRO_SECS
(
MONITOR_SRV_BACKGROUND_DROP_TABLE_MICROSECOND
,
counter_time
);
if
(
srv_shutdown_state
>
0
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
return
;
}
...
...
@@ -2950,11 +2950,7 @@ srv_master_do_active_tasks(void)
MONITOR_SRV_MEM_VALIDATE_MICROSECOND
,
counter_time
);
}
#endif
if
(
srv_shutdown_state
>
0
)
{
return
;
}
if
(
srv_shutdown_state
>
0
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
return
;
}
...
...
@@ -2967,7 +2963,7 @@ srv_master_do_active_tasks(void)
MONITOR_SRV_DICT_LRU_MICROSECOND
,
counter_time
);
}
if
(
srv_shutdown_state
>
0
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
return
;
}
...
...
@@ -3011,7 +3007,7 @@ srv_master_do_idle_tasks(void)
MONITOR_SRV_BACKGROUND_DROP_TABLE_MICROSECOND
,
counter_time
);
if
(
srv_shutdown_state
>
0
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
return
;
}
...
...
@@ -3027,7 +3023,7 @@ srv_master_do_idle_tasks(void)
MONITOR_INC_TIME_IN_MICRO_SECS
(
MONITOR_SRV_IBUF_MERGE_MICROSECOND
,
counter_time
);
if
(
srv_shutdown_state
>
0
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
return
;
}
...
...
@@ -3043,7 +3039,7 @@ srv_master_do_idle_tasks(void)
MONITOR_INC_TIME_IN_MICRO_SECS
(
MONITOR_SRV_LOG_FLUSH_MICROSECOND
,
counter_time
);
if
(
srv_shutdown_state
>
0
)
{
if
(
srv_shutdown_state
!=
SRV_SHUTDOWN_NONE
)
{
return
;
}
...
...
@@ -3064,70 +3060,42 @@ srv_master_do_idle_tasks(void)
}
}
/*********************************************************************//**
Perform the tasks during shutdown. The tasks that we do at shutdown
depend on srv_fast_shutdown:
2 => very fast shutdown => do no book keeping
1 => normal shutdown => clear drop table queue and make checkpoint
0 => slow shutdown => in addition to above do complete purge and ibuf
merge
@return TRUE if some work was done. FALSE otherwise */
/** Perform shutdown tasks.
@param[in] ibuf_merge whether to complete the change buffer merge */
static
ibool
srv_master_do_shutdown_tasks
(
/*=========================*/
ib_time_t
*
last_print_time
)
/*!< last time the function
print the message */
void
srv_shutdown
(
bool
ibuf_merge
)
{
ulint
n_bytes_merged
=
0
;
ulint
n_tables_to_drop
=
0
;
ut_ad
(
!
srv_read_only_mode
);
++
srv_main_shutdown_loops
;
ulint
n_bytes_merged
=
0
;
ulint
n_tables_to_drop
;
ib_time_t
now
=
ut_time
();
ut_a
(
srv_shutdown_state
>
0
);
/* In very fast shutdown none of the following is necessary */
if
(
srv_fast_shutdown
==
2
)
{
return
(
FALSE
);
}
/* ALTER TABLE in MySQL requires on Unix that the table handler
can drop tables lazily after there no longer are SELECT
queries to them. */
srv_main_thread_op_info
=
"doing background drop tables"
;
n_tables_to_drop
=
row_drop_tables_for_mysql_in_background
();
/* make sure that there is enough reusable space in the redo
log files */
srv_main_thread_op_info
=
"checking free log space"
;
log_free_check
();
/* In case of normal shutdown we don't do ibuf merge or purge */
if
(
srv_fast_shutdown
==
1
)
{
goto
func_exit
;
}
/* Do an ibuf merge */
srv_main_thread_op_info
=
"doing insert buffer merge"
;
n_bytes_merged
=
ibuf_merge_in_background
(
true
);
/* Flush logs if needed */
srv_sync_log_buffer_in_background
();
func_exit:
/* Make a new checkpoint about once in 10 seconds */
srv_main_thread_op_info
=
"making checkpoint"
;
log_checkpoint
(
TRUE
,
FALSE
,
FALSE
);
/* Print progress message every 60 seconds during shutdown */
if
(
srv_shutdown_state
>
0
&&
srv_print_verbose_log
)
{
srv_shutdown_print_master_pending
(
last_print_time
,
n_tables_to_drop
,
n_bytes_merged
);
}
do
{
ut_ad
(
!
srv_read_only_mode
);
ut_ad
(
srv_shutdown_state
==
SRV_SHUTDOWN_CLEANUP
);
++
srv_main_shutdown_loops
;
/* FIXME: Remove the background DROP TABLE queue; it is not
crash-safe and breaks ACID. */
srv_main_thread_op_info
=
"doing background drop tables"
;
n_tables_to_drop
=
row_drop_tables_for_mysql_in_background
();
if
(
ibuf_merge
)
{
srv_main_thread_op_info
=
"checking free log space"
;
log_free_check
();
srv_main_thread_op_info
=
"doing insert buffer merge"
;
n_bytes_merged
=
ibuf_merge_in_background
(
true
);
/* Flush logs if needed */
srv_sync_log_buffer_in_background
();
}
return
(
n_bytes_merged
||
n_tables_to_drop
);
/* Print progress message every 60 seconds during shutdown */
if
(
srv_print_verbose_log
)
{
srv_shutdown_print_master_pending
(
&
now
,
n_tables_to_drop
,
n_bytes_merged
);
}
}
while
(
n_bytes_merged
||
n_tables_to_drop
);
}
/*********************************************************************//**
...
...
@@ -3161,7 +3129,6 @@ DECLARE_THREAD(srv_master_thread)(
ulint
old_activity_count
=
srv_get_activity_count
();
ulint
old_ibuf_merge_activity_count
=
srv_get_ibuf_merge_activity_count
();
ib_time_t
last_print_time
;
ut_ad
(
!
srv_read_only_mode
);
...
...
@@ -3184,7 +3151,6 @@ DECLARE_THREAD(srv_master_thread)(
slot
=
srv_reserve_slot
(
SRV_MASTER
);
ut_a
(
slot
==
srv_sys
.
sys_threads
);
last_print_time
=
ut_time
();
loop
:
if
(
srv_force_recovery
>=
SRV_FORCE_NO_BACKGROUND
)
{
goto
suspend_thread
;
...
...
@@ -3210,13 +3176,26 @@ DECLARE_THREAD(srv_master_thread)(
}
}
while
(
srv_master_do_shutdown_tasks
(
&
last_print_time
))
{
/* Shouldn't loop here in case of very fast shutdown */
ut_ad
(
srv_fast_shutdown
<
2
);
suspend_thread
:
switch
(
srv_shutdown_state
)
{
case
SRV_SHUTDOWN_NONE
:
break
;
case
SRV_SHUTDOWN_FLUSH_PHASE
:
case
SRV_SHUTDOWN_LAST_PHASE
:
ut_ad
(
0
);
/* fall through */
case
SRV_SHUTDOWN_EXIT_THREADS
:
/* srv_init_abort() must have been invoked */
case
SRV_SHUTDOWN_CLEANUP
:
if
(
srv_shutdown_state
==
SRV_SHUTDOWN_CLEANUP
&&
srv_fast_shutdown
<
2
)
{
srv_shutdown
(
srv_fast_shutdown
==
1
);
}
srv_suspend_thread
(
slot
);
my_thread_end
();
os_thread_exit
(
NULL
);
}
suspend_thread
:
srv_main_thread_op_info
=
"suspending"
;
srv_suspend_thread
(
slot
);
...
...
@@ -3228,15 +3207,7 @@ DECLARE_THREAD(srv_master_thread)(
srv_main_thread_op_info
=
"waiting for server activity"
;
srv_resume_thread
(
slot
);
if
(
srv_shutdown_state
==
SRV_SHUTDOWN_EXIT_THREADS
)
{
my_thread_end
();
os_thread_exit
(
NULL
);
}
goto
loop
;
OS_THREAD_DUMMY_RETURN
;
/* Not reached, avoid compiler warning */
}
/*********************************************************************//**
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment