update to ease the patch process
sql/event_queue.cc: integrate Event_queue::check_system_tables() into the boot procedure sql/event_queue.h: make Event_queue::check_system_tables() void, instead of bool BitKeeper/etc/ignore: Added sql/.deps/client.Po sql/.deps/derror.Po sql/.deps/des_key_file.Po sql/.deps/discover.Po sql/.deps/event_data_objects.Po sql/.deps/event_db_repository.Po sql/.deps/event_queue.Po sql/.deps/event_scheduler.Po sql/.deps/events.Po sql/.deps/field.Po sql/.deps/field_conv.Po sql/.deps/filesort.Po sql/.deps/gen_lex_hash.Po sql/.deps/gstream.Po sql/.deps/ha_berkeley.Po sql/.deps/ha_federated.Po sql/.deps/ha_heap.Po sql/.deps/ha_innodb.Po sql/.deps/ha_myisam.Po sql/.deps/ha_myisammrg.Po sql/.deps/ha_ndbcluster.Po sql/.deps/ha_ndbcluster_binlog.Po sql/.deps/ha_partition.Po sql/.deps/handler.Po sql/.deps/hash_filo.Po sql/.deps/hostname.Po sql/.deps/init.Po sql/.deps/item.Po sql/.deps/item_buff.Po sql/.deps/item_cmpfunc.Po sql/.deps/item_create.Po sql/.deps/item_func.Po sql/.deps/item_geofunc.Po sql/.deps/item_row.Po sql/.deps/item_strfunc.Po sql/.deps/item_subselect.Po sql/.deps/item_sum.Po sql/.deps/item_timefunc.Po sql/.deps/item_uniq.Po sql/.deps/item_xmlfunc.Po sql/.deps/key.Po sql/.deps/lock.Po sql/.deps/ log.Po sql/.deps/log_event.Po sql/.deps/mf_iocache.Po sql/.deps/mini_client_errors.Po sql/.deps/my_decimal.Po sql/.deps/my_lock.Po sql/.deps/my_time.Po sql/.deps/my_user.Po sql/.deps/mysql_tzinfo_to_sql.Po sql/.deps/mysqld.Po sql/.deps/net_serv.Po sql/.deps/opt_range.Po sql/.deps/opt_sum.Po sql/.deps/pack.Po sql/.deps/parse_file.Po sql/.deps/partition_info.Po sql/.deps/password.Po sql/.deps/procedure.Po sql/.deps/protocol.Po sql/.deps/records.Po sql/.deps/repl_failsafe.Po sql/.deps/rpl_filter.Po sql/.deps/rpl_injector.Po sql/.deps/rpl_tblmap.Po sql/.deps/set_var.Po sql/.deps/slave.Po sql/.deps/sp.Po sql/.deps/sp_cache.Po sql/.deps/sp_head.Po sql/.deps/sp_pcontext.Po sql/.deps/sp_rcontext.Po sql/.deps/spatial.Po sql/.deps/sql_acl.Po sql/.deps/sql_analyse.Po sql/.deps/sql_base.Po sql/.deps/sql_binlog.Po sql/.deps/sql_builtin.Po sql/.deps/sql_cache.Po sql/.deps/sql_class.Po sql/.deps/sql_client.Po sql/.deps/sql_crypt.Po sql/.deps/sql_cursor.Po sql/.deps/sql_db.Po sql/.deps/sql_delete.Po sql/.deps/sql_derived .Po sql/.deps/sql_do.Po sql/.deps/sql_error.Po sql/.deps/sql_handler.Po sql/.deps/sql_help.Po sql/.deps/sql_insert.Po sql/.deps/sql_lex.Po sql/.deps/sql_list.Po sql/.deps/sql_load.Po sql/.deps/sql_manager.Po sql/.deps/sql_map.Po sql/.deps/sql_olap.Po sql/.deps/sql_parse.Po sql/.deps/sql_partition.Po sql/.deps/sql_plugin.Po sql/.deps/sql_prepare.Po sql/.deps/sql_rename.Po sql/.deps/sql_repl.Po sql/.deps/sql_select.Po sql/.deps/sql_show.Po sql/.deps/sql_state.Po sql/.deps/sql_string.Po sql/.deps/sql_table.Po sql/.deps/sql_tablespace.Po sql/.deps/sql_test.Po sql/.deps/sql_trigger.Po sql/.deps/sql_udf.Po sql/.deps/sql_union.Po sql/.deps/sql_update.Po sql/.deps/sql_view.Po sql/.deps/sql_yacc.Po sql/.deps/stacktrace.Po sql/.deps/strfunc.Po sql/.deps/table.Po sql/.deps/thr_malloc.Po sql/.deps/time.Po sql/.deps/tztime.Po sql/.deps/udf_example.Plo sql/.deps/uniques.Po sql/.deps/unireg.Po sql/.libs/udf_example.lai sql/.libs/udf_example.so.0 sql/.libs/udf_example.so.0.0.0 storage/archive/.deps/archive_test-archive_t est.Po storage/archive/.deps/archive_test-azio.Po storage/archive/.deps/ha_archive_la-azio.Plo storage/archive/.deps/ha_archive_la-ha_archive.Plo storage/archive/.deps/libarchive_a-azio.Po storage/archive/.deps/libarchive_a-ha_archive.Po storage/blackhole/.deps/ha_blackhole_la-ha_blackhole.Plo storage/blackhole/.deps/libblackhole_a-ha_blackhole.Po storage/csv/.deps/ha_csv_la-ha_tina.Plo storage/csv/.deps/libcsv_a-ha_tina.Po storage/example/.deps/ha_example_la-ha_example.Plo storage/example/.deps/libexample_a-ha_example.Po storage/heap/.deps/_check.Po storage/heap/.deps/_rectest.Po storage/heap/.deps/hp_block.Po storage/heap/.deps/hp_clear.Po storage/heap/.deps/hp_close.Po storage/heap/.deps/hp_create.Po storage/heap/.deps/hp_delete.Po storage/heap/.deps/hp_extra.Po storage/heap/.deps/hp_hash.Po storage/heap/.deps/hp_info.Po storage/heap/.deps/hp_open.Po storage/heap/.deps/hp_panic.Po storage/heap/.deps/hp_rename.Po storage/heap/.deps/hp_rfirst.Po storage/heap/.deps/hp_rkey.Po storage/heap/.deps/hp_rlast.P o storage/heap/.deps/hp_rnext.Po storage/heap/.deps/hp_rprev.Po storage/heap/.deps/hp_rrnd.Po storage/heap/.deps/hp_rsame.Po storage/heap/.deps/hp_scan.Po storage/heap/.deps/hp_static.Po storage/heap/.deps/hp_test1.Po storage/heap/.deps/hp_test2.Po storage/heap/.deps/hp_update.Po storage/heap/.deps/hp_write.Po storage/innobase/btr/.deps/btr0btr.Po storage/innobase/btr/.deps/btr0cur.Po storage/innobase/btr/.deps/btr0pcur.Po storage/innobase/btr/.deps/btr0sea.Po storage/innobase/buf/.deps/buf0buf.Po storage/innobase/buf/.deps/buf0flu.Po storage/innobase/buf/.deps/buf0lru.Po storage/innobase/buf/.deps/buf0rea.Po storage/innobase/data/.deps/data0data.Po storage/innobase/data/.deps/data0type.Po storage/innobase/dict/.deps/dict0boot.Po storage/innobase/dict/.deps/dict0crea.Po storage/innobase/dict/.deps/dict0dict.Po storage/innobase/dict/.deps/dict0load.Po storage/innobase/dict/.deps/dict0mem.Po storage/innobase/dyn/.deps/dyn0dyn.Po storage/innobase/eval/.deps/eval0eval.Po storage/innobase/eval/.deps/eval0proc. Po storage/innobase/fil/.deps/fil0fil.Po storage/innobase/fsp/.deps/fsp0fsp.Po storage/innobase/fut/.deps/fut0fut.Po storage/innobase/fut/.deps/fut0lst.Po storage/innobase/ha/.deps/ha0ha.Po storage/innobase/ha/.deps/hash0hash.Po storage/innobase/ibuf/.deps/ibuf0ibuf.Po storage/innobase/lock/.deps/lock0lock.Po storage/innobase/log/.deps/log0log.Po storage/innobase/log/.deps/log0recv.Po storage/innobase/mach/.deps/mach0data.Po storage/innobase/mem/.deps/mem0mem.Po storage/innobase/mem/.deps/mem0pool.Po storage/innobase/mtr/.deps/mtr0log.Po storage/innobase/mtr/.deps/mtr0mtr.Po storage/innobase/os/.deps/os0file.Po storage/innobase/os/.deps/os0proc.Po storage/innobase/os/.deps/os0sync.Po storage/innobase/os/.deps/os0thread.Po storage/innobase/page/.deps/page0cur.Po storage/innobase/page/.deps/page0page.Po storage/innobase/pars/.deps/lexyy.Po storage/innobase/pars/.deps/pars0grm.Po storage/innobase/pars/.deps/pars0opt.Po storage/innobase/pars/.deps/pars0pars.Po storage/innobase/pars/.deps/pars0sym.Po storage/i nnobase/que/.deps/que0que.Po storage/innobase/read/.deps/read0read.Po storage/innobase/rem/.deps/rem0cmp.Po storage/innobase/rem/.deps/rem0rec.Po storage/innobase/row/.deps/row0ins.Po storage/innobase/row/.deps/row0mysql.Po storage/innobase/row/.deps/row0purge.Po storage/innobase/row/.deps/row0row.Po storage/innobase/row/.deps/row0sel.Po storage/innobase/row/.deps/row0uins.Po storage/innobase/row/.deps/row0umod.Po storage/innobase/row/.deps/row0undo.Po storage/innobase/row/.deps/row0upd.Po storage/innobase/row/.deps/row0vers.Po storage/innobase/srv/.deps/srv0que.Po storage/innobase/srv/.deps/srv0srv.Po storage/innobase/srv/.deps/srv0start.Po storage/innobase/sync/.deps/sync0arr.Po storage/innobase/sync/.deps/sync0rw.Po storage/innobase/sync/.deps/sync0sync.Po storage/innobase/thr/.deps/thr0loc.Po storage/innobase/trx/.deps/trx0purge.Po storage/innobase/trx/.deps/trx0rec.Po storage/innobase/trx/.deps/trx0roll.Po storage/innobase/trx/.deps/trx0rseg.Po storage/innobase/trx/.deps/trx0sys.Po storage/innobase/t rx/.deps/trx0trx.Po storage/innobase/trx/.deps/trx0undo.Po storage/innobase/usr/.deps/usr0sess.Po storage/innobase/ut/.deps/ut0byte.Po storage/innobase/ut/.deps/ut0dbg.Po storage/innobase/ut/.deps/ut0list.Po storage/innobase/ut/.deps/ut0mem.Po storage/innobase/ut/.deps/ut0rnd.Po storage/innobase/ut/.deps/ut0ut.Po storage/innobase/ut/.deps/ut0vec.Po storage/innobase/ut/.deps/ut0wqueue.Po storage/myisam/.deps/ft_boolean_search.Po storage/myisam/.deps/ft_nlq_search.Po storage/myisam/.deps/ft_parser.Po storage/myisam/.deps/ft_static.Po storage/myisam/.deps/ft_stopwords.Po storage/myisam/.deps/ft_update.Po storage/myisam/.deps/mi_cache.Po storage/myisam/.deps/mi_changed.Po storage/myisam/.deps/mi_check.Po storage/myisam/.deps/mi_checksum.Po storage/myisam/.deps/mi_close.Po storage/myisam/.deps/mi_create.Po storage/myisam/.deps/mi_dbug.Po storage/myisam/.deps/mi_delete.Po storage/myisam/.deps/mi_delete_all.Po storage/myisam/.deps/mi_delete_table.Po storage/myisam/.deps/mi_dynrec.Po storage/myisam/.deps/mi_extra .Po storage/myisam/.deps/mi_info.Po storage/myisam/.deps/mi_key.Po storage/myisam/.deps/mi_keycache.Po storage/myisam/.deps/mi_locking.Po storage/myisam/.deps/mi_log.Po storage/myisam/.deps/mi_open.Po storage/myisam/.deps/mi_packrec.Po storage/myisam/.deps/mi_page.Po storage/myisam/.deps/mi_panic.Po storage/myisam/.deps/mi_preload.Po storage/myisam/.deps/mi_range.Po storage/myisam/.deps/mi_rename.Po storage/myisam/.deps/mi_rfirst.Po storage/myisam/.deps/mi_rkey.Po storage/myisam/.deps/mi_rlast.Po storage/myisam/.deps/mi_rnext.Po storage/myisam/.deps/mi_rnext_same.Po storage/myisam/.deps/mi_rprev.Po storage/myisam/.deps/mi_rrnd.Po storage/myisam/.deps/mi_rsame.Po storage/myisam/.deps/mi_rsamepos.Po storage/myisam/.deps/mi_scan.Po storage/myisam/.deps/mi_search.Po storage/myisam/.deps/mi_static.Po storage/myisam/.deps/mi_statrec.Po storage/myisam/.deps/mi_test1.Po storage/myisam/.deps/mi_test2.Po storage/myisam/.deps/mi_test3.Po storage/myisam/.deps/mi_unique.Po storage/myisam/.deps/mi_update.Po storage/myi sam/.deps/mi_write.Po storage/myisam/.deps/myisam_ftdump.Po storage/myisam/.deps/myisamchk.Po storage/myisam/.deps/myisamlog.Po storage/myisam/.deps/myisampack.Po storage/myisam/.deps/rt_index.Po storage/myisam/.deps/rt_key.Po storage/myisam/.deps/rt_mbr.Po storage/myisam/.deps/rt_split.Po storage/myisam/.deps/rt_test.Po storage/myisam/.deps/sort.Po storage/myisam/.deps/sp_key.Po storage/myisam/.deps/sp_test.Po storage/myisammrg/.deps/myrg_close.Po storage/myisammrg/.deps/myrg_create.Po storage/myisammrg/.deps/myrg_delete.Po storage/myisammrg/.deps/myrg_extra.Po storage/myisammrg/.deps/myrg_info.Po storage/myisammrg/.deps/myrg_locking.Po storage/myisammrg/.deps/myrg_open.Po storage/myisammrg/.deps/myrg_panic.Po storage/myisammrg/.deps/myrg_queue.Po storage/myisammrg/.deps/myrg_range.Po storage/myisammrg/.deps/myrg_rfirst.Po storage/myisammrg/.deps/myrg_rkey.Po storage/myisammrg/.deps/myrg_rlast.Po storage/myisammrg/.deps/myrg_rnext.Po storage/myisammrg/.deps/myrg_rnext_same.Po storage/myisammrg/.deps/myrg _rprev.Po storage/myisammrg/.deps/myrg_rrnd.Po storage/myisammrg/.deps/myrg_rsame.Po storage/myisammrg/.deps/myrg_static.Po storage/myisammrg/.deps/myrg_update.Po storage/myisammrg/.deps/myrg_write.Po strings/.deps/bchange.Po strings/.deps/bcmp.Po strings/.deps/bfill.Po strings/.deps/bmove.Po strings/.deps/bmove512.Po strings/.deps/bmove_upp.Po strings/.deps/conf_to_src.Po strings/.deps/ctype-big5.Po strings/.deps/ctype-bin.Po strings/.deps/ctype-cp932.Po strings/.deps/ctype-czech.Po strings/.deps/ctype-euc_kr.Po strings/.deps/ctype-eucjpms.Po strings/.deps/ctype-extra.Po strings/.deps/ctype-gb2312.Po strings/.deps/ctype-gbk.Po strings/.deps/ctype-latin1.Po strings/.deps/ctype-mb.Po strings/.deps/ctype-simple.Po strings/.deps/ctype-sjis.Po strings/.deps/ctype-tis620.Po strings/.deps/ctype-uca.Po strings/.deps/ctype-ucs2.Po strings/.deps/ctype-ujis.Po strings/.deps/ctype-utf8.Po strings/.deps/ctype-win1250ch.Po strings/.deps/ctype.Po strings/.deps/decimal.Po strings/.deps/int2str.Po strings/.deps/is_prefix .Po strings/.deps/llstr.Po strings/.deps/longlong2str.Po strings/.deps/longlong2str_asm.Po strings/.deps/my_strchr.Po strings/.deps/my_strtoll10.Po strings/.deps/my_vsnprintf.Po strings/.deps/r_strinstr.Po strings/.deps/str2int.Po strings/.deps/str_alloc.Po strings/.deps/strappend.Po strings/.deps/strcend.Po strings/.deps/strcont.Po strings/.deps/strend.Po strings/.deps/strfill.Po strings/.deps/strinstr.Po strings/.deps/strmake.Po strings/.deps/strmov.Po strings/.deps/strnlen.Po strings/.deps/strnmov.Po strings/.deps/strstr.Po strings/.deps/strtod.Po strings/.deps/strtol.Po strings/.deps/strtoll.Po strings/.deps/strtoul.Po strings/.deps/strtoull.Po strings/.deps/strxmov.Po strings/.deps/strxnmov.Po strings/.deps/xml.Po tests/.deps/dummy.Po tests/.deps/insert_test.Po tests/.deps/mysql_client_test.Po tests/.deps/select_test.Po tests/.deps/thread_test.Po tests/.libs/lt-mysql_client_test tests/.libs/mysql_client_test unittest/examples/.deps/no_plan-t.Po unittest/examples/.deps/simple-t.Po unittest/examples/.d eps/skip-t.Po unittest/examples/.deps/skip_all-t.Po unittest/examples/.deps/todo-t.Po unittest/mysys/.deps/base64-t.Po unittest/mysys/.deps/bitmap-t.Po unittest/mysys/.deps/my_atomic-t.Po unittest/mytap/t/.deps/basic-t.Po unittest/mytap/.deps/tap.Po vio/.deps/dummy.Po vio/.deps/test-ssl.Po vio/.deps/test-sslclient.Po vio/.deps/test-sslserver.Po vio/.deps/vio.Po vio/.deps/viosocket.Po vio/.deps/viossl.Po vio/.deps/viosslfactories.Po client/.deps/base64.Po client/.deps/completion_hash.Po client/.deps/dummy.Po client/.deps/mf_tempdir.Po client/.deps/my_bit.Po client/.deps/my_bitmap.Po client/.deps/my_getsystime.Po client/.deps/my_new.Po client/.deps/my_user.Po client/.deps/my_vle.Po client/.deps/mysql.Po client/.deps/mysql_upgrade.Po client/.deps/mysqladmin.Po client/.deps/mysqlbinlog.Po client/.deps/mysqlcheck.Po client/.deps/mysqldump.Po client/.deps/mysqlimport.Po client/.deps/mysqlshow.Po client/.deps/mysqlslap.Po client/.deps/mysqltest.Po client/.deps/readline.Po client/.deps/sql_string.Po client/.libs/ lt-mysql client/.libs/lt-mysqladmin client/.libs/lt-mysqlbinlog client/.libs/lt-mysqlcheck client/.libs/lt-mysqldump client/.libs/lt-mysqlimport client/.libs/lt-mysqlshow client/.libs/lt-mysqlslap client/.libs/lt-mysqltest client/.libs/mysql client/.libs/mysql_upgrade client/.libs/mysqladmin client/.libs/mysqlbinlog client/.libs/mysqlcheck client/.libs/mysqldump client/.libs/mysqlimport client/.libs/mysqlshow client/.libs/mysqlslap client/.libs/mysqltest cmd-line-utils/libedit/.deps/chared.Po cmd-line-utils/libedit/.deps/common.Po cmd-line-utils/libedit/.deps/el.Po cmd-line-utils/libedit/.deps/emacs.Po cmd-line-utils/libedit/.deps/fcns.Po cmd-line-utils/libedit/.deps/fgetln.Po cmd-line-utils/libedit/.deps/help.Po cmd-line-utils/libedit/.deps/hist.Po cmd-line-utils/libedit/.deps/history.Po cmd-line-utils/libedit/.deps/key.Po cmd-line-utils/libedit/.deps/map.Po cmd-line-utils/libedit/.deps/parse.Po cmd-line-utils/libedit/.deps/prompt.Po cmd-line-utils/libedit/.deps/read.Po cmd-line-utils/libedit/.deps/readl ine.Po cmd-line-utils/libedit/.deps/refresh.Po cmd-line-utils/libedit/.deps/search.Po cmd-line-utils/libedit/.deps/sig.Po cmd-line-utils/libedit/.deps/strlcat.Po cmd-line-utils/libedit/.deps/strlcpy.Po cmd-line-utils/libedit/.deps/term.Po cmd-line-utils/libedit/.deps/tokenizer.Po cmd-line-utils/libedit/.deps/tty.Po cmd-line-utils/libedit/.deps/unvis.Po cmd-line-utils/libedit/.deps/vi.Po cmd-line-utils/libedit/.deps/vis.Po cmd-line-utils/readline/.deps/bind.Po cmd-line-utils/readline/.deps/callback.Po cmd-line-utils/readline/.deps/compat.Po cmd-line-utils/readline/.deps/complete.Po cmd-line-utils/readline/.deps/display.Po cmd-line-utils/readline/.deps/funmap.Po cmd-line-utils/readline/.deps/histexpand.Po cmd-line-utils/readline/.deps/histfile.Po cmd-line-utils/readline/.deps/history.Po cmd-line-utils/readline/.deps/histsearch.Po cmd-line-utils/readline/.deps/input.Po cmd-line-utils/readline/.deps/isearch.Po cmd-line-utils/readline/.deps/keymaps.Po cmd-line-utils/readline/.deps/kill.Po cmd-line-utils/readli ne/.deps/macro.Po cmd-line-utils/readline/.deps/mbutil.Po cmd-line-utils/readline/.deps/misc.Po cmd-line-utils/readline/.deps/nls.Po cmd-line-utils/readline/.deps/parens.Po cmd-line-utils/readline/.deps/readline.Po cmd-line-utils/readline/.deps/rltty.Po cmd-line-utils/readline/.deps/savestring.Po cmd-line-utils/readline/.deps/search.Po cmd-line-utils/readline/.deps/shell.Po cmd-line-utils/readline/.deps/signals.Po cmd-line-utils/readline/.deps/terminal.Po cmd-line-utils/readline/.deps/text.Po cmd-line-utils/readline/.deps/tilde.Po cmd-line-utils/readline/.deps/undo.Po cmd-line-utils/readline/.deps/util.Po cmd-line-utils/readline/.deps/vi_mode.Po cmd-line-utils/readline/.deps/xmalloc.Po dbug/.deps/dbug.Po dbug/.deps/dbug_analyze.Po dbug/.deps/factorial.Po dbug/.deps/my_main.Po dbug/.deps/sanity.Po extra/yassl/src/.deps/buffer.Plo extra/yassl/src/.deps/cert_wrapper.Plo extra/yassl/src/.deps/crypto_wrapper.Plo extra/yassl/src/.deps/handshake.Plo extra/yassl/src/.deps/lock.Plo extra/yassl/src/.deps/log.Plo ex tra/yassl/src/.deps/socket_wrapper.Plo extra/yassl/src/.deps/ssl.Plo extra/yassl/src/.deps/template_instnt.Plo extra/yassl/src/.deps/timer.Plo extra/yassl/src/.deps/yassl_error.Plo extra/yassl/src/.deps/yassl_imp.Plo extra/yassl/src/.deps/yassl_int.Plo extra/yassl/taocrypt/benchmark/.deps/benchmark-benchmark.Po extra/yassl/taocrypt/src/.deps/libtaocrypt_la-aes.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-aestables.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-algebra.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-arc4.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-asn.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-bftables.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-blowfish.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-coding.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-des.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-dh.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-dsa.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-file.Plo extra/yassl/taocrypt/src/.deps/libt aocrypt_la-hash.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-integer.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-md2.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-md4.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-md5.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-misc.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-random.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-ripemd.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-rsa.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-sha.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-template_instnt.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-tftables.Plo extra/yassl/taocrypt/src/.deps/libtaocrypt_la-twofish.Plo extra/yassl/taocrypt/test/.deps/test-test.Po extra/yassl/testsuite/.deps/testsuite-client.Po extra/yassl/testsuite/.deps/testsuite-echoclient.Po extra/yassl/testsuite/.deps/testsuite-echoserver.Po extra/yassl/testsuite/.deps/testsuite-server.Po extra/yassl/testsuite/.deps/testsuite-test.Po extra/yassl/testsuite/.deps/t estsuite-testsuite.Po extra/.deps/charset2html.Po extra/.deps/comp_err.Po extra/.deps/innochecksum.Po extra/.deps/my_print_defaults.Po extra/.deps/mysql_waitpid.Po extra/.deps/perror.Po extra/.deps/replace.Po extra/.deps/resolve_stack_dump.Po extra/.deps/resolveip.Po libmysql/.deps/array.Plo libmysql/.deps/bchange.Plo libmysql/.deps/bcmp.Plo libmysql/.deps/bmove.Plo libmysql/.deps/bmove_upp.Plo libmysql/.deps/charset-def.Plo libmysql/.deps/charset.Plo libmysql/.deps/client.Plo libmysql/.deps/conf_to_src.Po libmysql/.deps/ctype-big5.Plo libmysql/.deps/ctype-bin.Plo libmysql/.deps/ctype-cp932.Plo libmysql/.deps/ctype-czech.Plo libmysql/.deps/ctype-euc_kr.Plo libmysql/.deps/ctype-eucjpms.Plo libmysql/.deps/ctype-extra.Plo libmysql/.deps/ctype-gb2312.Plo libmysql/.deps/ctype-gbk.Plo libmysql/.deps/ctype-latin1.Plo libmysql/.deps/ctype-mb.Plo libmysql/.deps/ctype-simple.Plo libmysql/.deps/ctype-sjis.Plo libmysql/.deps/ctype-tis620.Plo libmysql/.deps/ctype-uca.Plo libmysql/.deps/ctype-ucs2.Plo libmysql/.deps/ct ype-ujis.Plo libmysql/.deps/ctype-utf8.Plo libmysql/.deps/ctype-win1250ch.Plo libmysql/.deps/ctype.Plo libmysql/.deps/dbug.Plo libmysql/.deps/default.Plo libmysql/.deps/default_modify.Plo libmysql/.deps/errmsg.Plo libmysql/.deps/errors.Plo libmysql/.deps/get_password.Plo libmysql/.deps/hash.Plo libmysql/.deps/int2str.Plo libmysql/.deps/is_prefix.Plo libmysql/.deps/libmysql.Plo libmysql/.deps/list.Plo libmysql/.deps/llstr.Plo libmysql/.deps/longlong2str.Plo libmysql/.deps/manager.Plo libmysql/.deps/md5.Plo libmysql/.deps/mf_cache.Plo libmysql/.deps/mf_dirname.Plo libmysql/.deps/mf_fn_ext.Plo libmysql/.deps/mf_format.Plo libmysql/.deps/mf_iocache.Plo libmysql/.deps/mf_iocache2.Plo libmysql/.deps/mf_loadpath.Plo libmysql/.deps/mf_pack.Plo libmysql/.deps/mf_path.Plo libmysql/.deps/mf_tempfile.Plo libmysql/.deps/mf_unixpath.Plo libmysql/.deps/mf_wcomp.Plo libmysql/.deps/mulalloc.Plo libmysql/.deps/my_alloc.Plo libmysql/.deps/my_chsize.Plo libmysql/.deps/my_compress.Plo libmysql/.deps/my_create.Plo libmysql/.de ps/my_delete.Plo libmysql/.deps/my_div.Plo libmysql/.deps/my_error.Plo libmysql/.deps/my_file.Plo libmysql/.deps/my_fopen.Plo libmysql/.deps/my_fstream.Plo libmysql/.deps/my_gethostbyname.Plo libmysql/.deps/my_getopt.Plo libmysql/.deps/my_getwd.Plo libmysql/.deps/my_init.Plo libmysql/.deps/my_lib.Plo libmysql/.deps/my_malloc.Plo libmysql/.deps/my_messnc.Plo libmysql/.deps/my_net.Plo libmysql/.deps/my_once.Plo libmysql/.deps/my_open.Plo libmysql/.deps/my_port.Plo libmysql/.deps/my_pread.Plo libmysql/.deps/my_pthread.Plo libmysql/.deps/my_read.Plo libmysql/.deps/my_realloc.Plo libmysql/.deps/my_rename.Plo libmysql/.deps/my_seek.Plo libmysql/.deps/my_sleep.Plo libmysql/.deps/my_static.Plo libmysql/.deps/my_strtoll10.Plo libmysql/.deps/my_symlink.Plo libmysql/.deps/my_thr_init.Plo libmysql/.deps/my_time.Plo libmysql/.deps/my_vsnprintf.Plo libmysql/.deps/my_write.Plo libmysql/.deps/net.Plo libmysql/.deps/pack.Plo libmysql/.deps/password.Plo libmysql/.deps/safemalloc.Plo libmysql/.deps/sha1.Plo libmysql/.deps/s tr2int.Plo libmysql/.deps/str_alloc.Plo libmysql/.deps/strcend.Plo libmysql/.deps/strcont.Plo libmysql/.deps/strend.Plo libmysql/.deps/strfill.Plo libmysql/.deps/string.Plo libmysql/.deps/strinstr.Plo libmysql/.deps/strmake.Plo libmysql/.deps/strmov.Plo libmysql/.deps/strnlen.Plo libmysql/.deps/strnmov.Plo libmysql/.deps/strtod.Plo libmysql/.deps/strtoll.Plo libmysql/.deps/strtoull.Plo libmysql/.deps/strxmov.Plo libmysql/.deps/strxnmov.Plo libmysql/.deps/thr_mutex.Plo libmysql/.deps/typelib.Plo libmysql/.deps/vio.Plo libmysql/.deps/viosocket.Plo libmysql/.deps/viossl.Plo libmysql/.deps/viosslfactories.Plo libmysql/.deps/xml.Plo libmysql/.libs/libmysqlclient.lai libmysql/.libs/libmysqlclient.so.15 libmysql/.libs/libmysqlclient.so.15.0.0 libmysql_r/.deps/array.Plo libmysql_r/.deps/bchange.Plo libmysql_r/.deps/bcmp.Plo libmysql_r/.deps/bmove.Plo libmysql_r/.deps/bmove_upp.Plo libmysql_r/.deps/charset-def.Plo libmysql_r/.deps/charset.Plo libmysql_r/.deps/client.Plo libmysql_r/.deps/conf_to_src.Po libmysql_r/. deps/ctype-big5.Plo libmysql_r/.deps/ctype-bin.Plo libmysql_r/.deps/ctype-cp932.Plo libmysql_r/.deps/ctype-czech.Plo libmysql_r/.deps/ctype-euc_kr.Plo libmysql_r/.deps/ctype-eucjpms.Plo libmysql_r/.deps/ctype-extra.Plo libmysql_r/.deps/ctype-gb2312.Plo libmysql_r/.deps/ctype-gbk.Plo libmysql_r/.deps/ctype-latin1.Plo libmysql_r/.deps/ctype-mb.Plo libmysql_r/.deps/ctype-simple.Plo libmysql_r/.deps/ctype-sjis.Plo libmysql_r/.deps/ctype-tis620.Plo libmysql_r/.deps/ctype-uca.Plo libmysql_r/.deps/ctype-ucs2.Plo libmysql_r/.deps/ctype-ujis.Plo libmysql_r/.deps/ctype-utf8.Plo libmysql_r/.deps/ctype-win1250ch.Plo libmysql_r/.deps/ctype.Plo libmysql_r/.deps/dbug.Plo libmysql_r/.deps/default.Plo libmysql_r/.deps/default_modify.Plo libmysql_r/.deps/errmsg.Plo libmysql_r/.deps/errors.Plo libmysql_r/.deps/get_password.Plo libmysql_r/.deps/hash.Plo libmysql_r/.deps/int2str.Plo libmysql_r/.deps/is_prefix.Plo libmysql_r/.deps/libmysql.Plo libmysql_r/.deps/list.Plo libmysql_r/.deps/llstr.Plo libmysql_r/.deps/longlong2str.P lo libmysql_r/.deps/manager.Plo libmysql_r/.deps/md5.Plo libmysql_r/.deps/mf_cache.Plo libmysql_r/.deps/mf_dirname.Plo libmysql_r/.deps/mf_fn_ext.Plo libmysql_r/.deps/mf_format.Plo libmysql_r/.deps/mf_iocache.Plo libmysql_r/.deps/mf_iocache2.Plo libmysql_r/.deps/mf_loadpath.Plo libmysql_r/.deps/mf_pack.Plo libmysql_r/.deps/mf_path.Plo libmysql_r/.deps/mf_tempfile.Plo libmysql_r/.deps/mf_unixpath.Plo libmysql_r/.deps/mf_wcomp.Plo libmysql_r/.deps/mulalloc.Plo libmysql_r/.deps/my_alloc.Plo libmysql_r/.deps/my_chsize.Plo libmysql_r/.deps/my_compress.Plo libmysql_r/.deps/my_create.Plo libmysql_r/.deps/my_delete.Plo libmysql_r/.deps/my_div.Plo libmysql_r/.deps/my_error.Plo libmysql_r/.deps/my_file.Plo libmysql_r/.deps/my_fopen.Plo libmysql_r/.deps/my_fstream.Plo libmysql_r/.deps/my_gethostbyname.Plo libmysql_r/.deps/my_getopt.Plo libmysql_r/.deps/my_getwd.Plo libmysql_r/.deps/my_init.Plo libmysql_r/.deps/my_lib.Plo libmysql_r/.deps/my_malloc.Plo libmysql_r/.deps/my_messnc.Plo libmysql_r/.deps/my_net.Plo libmys ql_r/.deps/my_once.Plo libmysql_r/.deps/my_open.Plo libmysql_r/.deps/my_port.Plo libmysql_r/.deps/my_pread.Plo libmysql_r/.deps/my_pthread.Plo libmysql_r/.deps/my_read.Plo libmysql_r/.deps/my_realloc.Plo libmysql_r/.deps/my_rename.Plo libmysql_r/.deps/my_seek.Plo libmysql_r/.deps/my_sleep.Plo libmysql_r/.deps/my_static.Plo libmysql_r/.deps/my_strtoll10.Plo libmysql_r/.deps/my_symlink.Plo libmysql_r/.deps/my_thr_init.Plo libmysql_r/.deps/my_time.Plo libmysql_r/.deps/my_vsnprintf.Plo libmysql_r/.deps/my_write.Plo libmysql_r/.deps/net.Plo libmysql_r/.deps/pack.Plo libmysql_r/.deps/password.Plo libmysql_r/.deps/safemalloc.Plo libmysql_r/.deps/sha1.Plo libmysql_r/.deps/str2int.Plo libmysql_r/.deps/str_alloc.Plo libmysql_r/.deps/strcend.Plo libmysql_r/.deps/strcont.Plo libmysql_r/.deps/strend.Plo libmysql_r/.deps/strfill.Plo libmysql_r/.deps/string.Plo libmysql_r/.deps/strinstr.Plo libmysql_r/.deps/strmake.Plo libmysql_r/.deps/strmov.Plo libmysql_r/.deps/strnlen.Plo libmysql_r/.deps/strnmov.Plo libmysql_r/.deps /strtod.Plo libmysql_r/.deps/strtoll.Plo libmysql_r/.deps/strtoull.Plo libmysql_r/.deps/strxmov.Plo libmysql_r/.deps/strxnmov.Plo libmysql_r/.deps/thr_mutex.Plo libmysql_r/.deps/typelib.Plo libmysql_r/.deps/vio.Plo libmysql_r/.deps/viosocket.Plo libmysql_r/.deps/viossl.Plo libmysql_r/.deps/viosslfactories.Plo libmysql_r/.deps/xml.Plo libmysql_r/.libs/libmysqlclient_r.lai libmysql_r/.libs/libmysqlclient_r.so.15 libmysql_r/.libs/libmysqlclient_r.so.15.0.0 libmysqld/examples/.deps/completion_hash.Po libmysqld/examples/.deps/mysql.Po libmysqld/examples/.deps/mysql_client_test.Po libmysqld/examples/.deps/mysqltest.Po libmysqld/examples/.deps/readline.Po libmysqld/.deps/client.Po libmysqld/.deps/derror.Po libmysqld/.deps/discover.Po libmysqld/.deps/emb_qcache.Po libmysqld/.deps/errmsg.Po libmysqld/.deps/event_data_objects.Po libmysqld/.deps/event_db_repository.Po libmysqld/.deps/event_queue.Po libmysqld/.deps/event_scheduler.Po libmysqld/.deps/events.Po libmysqld/.deps/field.Po libmysqld/.deps/field_conv.Po lib mysqld/.deps/filesort.Po libmysqld/.deps/get_password.Po libmysqld/.deps/gstream.Po libmysqld/.deps/ha_berkeley.Po libmysqld/.deps/ha_federated.Po libmysqld/.deps/ha_heap.Po libmysqld/.deps/ha_innodb.Po libmysqld/.deps/ha_myisam.Po libmysqld/.deps/ha_myisammrg.Po libmysqld/.deps/ha_ndbcluster.Po libmysqld/.deps/ha_ndbcluster_binlog.Po libmysqld/.deps/ha_partition.Po libmysqld/.deps/handler.Po libmysqld/.deps/hash_filo.Po libmysqld/.deps/hostname.Po libmysqld/.deps/init.Po libmysqld/.deps/item.Po libmysqld/.deps/item_buff.Po libmysqld/.deps/item_cmpfunc.Po libmysqld/.deps/item_create.Po libmysqld/.deps/item_func.Po libmysqld/.deps/item_geofunc.Po libmysqld/.deps/item_row.Po libmysqld/.deps/item_strfunc.Po libmysqld/.deps/item_subselect.Po libmysqld/.deps/item_sum.Po libmysqld/.deps/item_timefunc.Po libmysqld/.deps/item_uniq.Po libmysqld/.deps/item_xmlfunc.Po libmysqld/.deps/key.Po libmysqld/.deps/lib_sql.Po libmysqld/.deps/libmysql.Po libmysqld/.deps/libmysqld.Po libmysqld/.deps/lock.Po libmysqld/.deps/log .Po libmysqld/.deps/log_event.Po libmysqld/.deps/my_decimal.Po libmysqld/.deps/my_time.Po libmysqld/.deps/my_user.Po libmysqld/.deps/net_serv.Po libmysqld/.deps/opt_range.Po libmysqld/.deps/opt_sum.Po libmysqld/.deps/pack.Po libmysqld/.deps/parse_file.Po libmysqld/.deps/partition_info.Po libmysqld/.deps/password.Po libmysqld/.deps/procedure.Po libmysqld/.deps/protocol.Po libmysqld/.deps/records.Po libmysqld/.deps/rpl_filter.Po libmysqld/.deps/rpl_injector.Po libmysqld/.deps/set_var.Po libmysqld/.deps/sp.Po libmysqld/.deps/sp_cache.Po libmysqld/.deps/sp_head.Po libmysqld/.deps/sp_pcontext.Po libmysqld/.deps/sp_rcontext.Po libmysqld/.deps/spatial.Po libmysqld/.deps/sql_acl.Po libmysqld/.deps/sql_analyse.Po libmysqld/.deps/sql_base.Po libmysqld/.deps/sql_builtin.Po libmysqld/.deps/sql_cache.Po libmysqld/.deps/sql_class.Po libmysqld/.deps/sql_crypt.Po libmysqld/.deps/sql_cursor.Po libmysqld/.deps/sql_db.Po libmysqld/.deps/sql_delete.Po libmysqld/.deps/sql_derived.Po libmysqld/.deps/sql_do.Po libmysqld/.deps/s ql_error.Po libmysqld/.deps/sql_handler.Po libmysqld/.deps/sql_help.Po libmysqld/.deps/sql_insert.Po libmysqld/.deps/sql_lex.Po libmysqld/.deps/sql_list.Po libmysqld/.deps/sql_load.Po libmysqld/.deps/sql_manager.Po libmysqld/.deps/sql_map.Po libmysqld/.deps/sql_parse.Po libmysqld/.deps/sql_partition.Po libmysqld/.deps/sql_plugin.Po libmysqld/.deps/sql_prepare.Po libmysqld/.deps/sql_rename.Po libmysqld/.deps/sql_select.Po libmysqld/.deps/sql_show.Po libmysqld/.deps/sql_state.Po libmysqld/.deps/sql_string.Po libmysqld/.deps/sql_table.Po libmysqld/.deps/sql_tablespace.Po libmysqld/.deps/sql_test.Po libmysqld/.deps/sql_trigger.Po libmysqld/.deps/sql_udf.Po libmysqld/.deps/sql_union.Po libmysqld/.deps/sql_update.Po libmysqld/.deps/sql_view.Po libmysqld/.deps/sql_yacc.Po libmysqld/.deps/stacktrace.Po libmysqld/.deps/strfunc.Po libmysqld/.deps/table.Po libmysqld/.deps/thr_malloc.Po libmysqld/.deps/time.Po libmysqld/.deps/tztime.Po libmysqld/.deps/uniques.Po libmysqld/.deps/unireg.Po mysys/.deps/array.Po mysys/.d eps/base64.Po mysys/.deps/charset-def.Po mysys/.deps/charset.Po mysys/.deps/checksum.Po mysys/.deps/default.Po mysys/.deps/default_modify.Po mysys/.deps/errors.Po mysys/.deps/hash.Po mysys/.deps/list.Po mysys/.deps/md5.Po mysys/.deps/mf_brkhant.Po mysys/.deps/mf_cache.Po mysys/.deps/mf_dirname.Po mysys/.deps/mf_fn_ext.Po mysys/.deps/mf_format.Po mysys/.deps/mf_getdate.Po mysys/.deps/mf_iocache.Po mysys/.deps/mf_iocache2.Po mysys/.deps/mf_keycache.Po mysys/.deps/mf_keycaches.Po mysys/.deps/mf_loadpath.Po mysys/.deps/mf_pack.Po mysys/.deps/mf_path.Po mysys/.deps/mf_qsort.Po mysys/.deps/mf_qsort2.Po mysys/.deps/mf_radix.Po mysys/.deps/mf_same.Po mysys/.deps/mf_sort.Po mysys/.deps/mf_strip.Po mysys/.deps/mf_tempdir.Po mysys/.deps/mf_tempfile.Po mysys/.deps/mf_unixpath.Po mysys/.deps/mf_wcomp.Po mysys/.deps/mf_wfile.Po mysys/.deps/mulalloc.Po mysys/.deps/my_access.Po mysys/.deps/my_aes.Po mysys/.deps/my_alarm.Po mysys/.deps/my_alloc.Po mysys/.deps/my_append.Po mysys/.deps/my_atomic.Po mysys/.deps/my_bit.Po mys ys/.deps/my_bitmap.Po mysys/.deps/my_chsize.Po mysys/.deps/my_clock.Po mysys/.deps/my_compress.Po mysys/.deps/my_copy.Po mysys/.deps/my_crc32.Po mysys/.deps/my_create.Po mysys/.deps/my_delete.Po mysys/.deps/my_div.Po mysys/.deps/my_dup.Po mysys/.deps/my_error.Po mysys/.deps/my_file.Po mysys/.deps/my_fopen.Po mysys/.deps/my_fstream.Po mysys/.deps/my_gethostbyname.Po mysys/.deps/my_gethwaddr.Po mysys/.deps/my_getncpus.Po mysys/.deps/my_getopt.Po mysys/.deps/my_getsystime.Po mysys/.deps/my_getwd.Po mysys/.deps/my_handler.Po mysys/.deps/my_init.Po mysys/.deps/my_largepage.Po mysys/.deps/my_lib.Po mysys/.deps/my_libwrap.Po mysys/.deps/my_lock.Po mysys/.deps/my_lockmem.Po mysys/.deps/my_lread.Po mysys/.deps/my_lwrite.Po mysys/.deps/my_malloc.Po mysys/.deps/my_memmem.Po mysys/.deps/my_messnc.Po mysys/.deps/my_mkdir.Po mysys/.deps/my_mmap.Po mysys/.deps/my_net.Po mysys/.deps/my_netware.Po mysys/.deps/my_new.Po mysys/.deps/my_once.Po mysys/.deps/my_open.Po mysys/.deps/my_port.Po mysys/.deps/my_pread.Po mysys/.deps /my_pthread.Po mysys/.deps/my_quick.Po mysys/.deps/my_read.Po mysys/.deps/my_realloc.Po mysys/.deps/my_redel.Po mysys/.deps/my_rename.Po mysys/.deps/my_seek.Po mysys/.deps/my_semaphore.Po mysys/.deps/my_sleep.Po mysys/.deps/my_static.Po mysys/.deps/my_symlink.Po mysys/.deps/my_symlink2.Po mysys/.deps/my_sync.Po mysys/.deps/my_thr_init.Po mysys/.deps/my_vle.Po mysys/.deps/my_windac.Po mysys/.deps/my_write.Po mysys/.deps/ptr_cmp.Po mysys/.deps/queues.Po mysys/.deps/rijndael.Po mysys/.deps/safemalloc.Po mysys/.deps/sha1.Po mysys/.deps/string.Po mysys/.deps/thr_alarm.Po mysys/.deps/thr_lock.Po mysys/.deps/thr_mutex.Po mysys/.deps/thr_rwlock.Po mysys/.deps/tree.Po mysys/.deps/trie.Po mysys/.deps/typelib.Po netware/.deps/libmysqlmain.Po netware/.deps/my_manage.Po netware/.deps/mysql_install_db.Po netware/.deps/mysql_test_run.Po netware/.deps/mysqld_safe.Po plugin/fulltext/.deps/mypluglib_la-plugin_example.Plo plugin/fulltext/.libs/mypluglib.lai plugin/fulltext/.libs/mypluglib.so.0 plugin/fulltext/.libs/myplugli b.so.0.0.0 pstack/.deps/bucomm.Po pstack/.deps/debug.Po pstack/.deps/filemode.Po pstack/.deps/ieee.Po pstack/.deps/linuxthreads.Po pstack/.deps/pstack.Po pstack/.deps/rddbg.Po pstack/.deps/stabs.Po regex/.deps/debug.Po regex/.deps/main.Po regex/.deps/regcomp.Po regex/.deps/regerror.Po regex/.deps/regexec.Po regex/.deps/regfree.Po regex/.deps/reginit.Po regex/.deps/split.Po server-tools/instance-manager/.deps/buffer.Po server-tools/instance-manager/.deps/command.Po server-tools/instance-manager/.deps/commands.Po server-tools/instance-manager/.deps/guardian.Po server-tools/instance-manager/.deps/instance.Po server-tools/instance-manager/.deps/instance_map.Po server-tools/instance-manager/.deps/instance_options.Po server-tools/instance-manager/.deps/liboptions_la-options.Plo server-tools/instance-manager/.deps/liboptions_la-priv.Plo server-tools/instance-manager/.deps/listener.Po server-tools/instance-manager/.deps/log.Po server-tools/instance-manager/.deps/manager.Po server-tools/instance-manager/.deps/mess ages.Po server-tools/instance-manager/.deps/mysql_connection.Po server-tools/instance-manager/.deps/mysqlmanager.Po server-tools/instance-manager/.deps/net_serv.Po server-tools/instance-manager/.deps/parse.Po server-tools/instance-manager/.deps/parse_output.Po server-tools/instance-manager/.deps/protocol.Po server-tools/instance-manager/.deps/thread_registry.Po server-tools/instance-manager/.deps/user_management_commands.Po server-tools/instance-manager/.deps/user_map.Po to the ignore list sql/event_scheduler.cc: Whitespaces and moving around to ease the job of diff sql/event_scheduler.h: init_scheduler() actually does not return anything but 0, then make it void
This commit is contained in:
parent
6327adebcb
commit
d65ab09c4d
1103
.bzrignore
1103
.bzrignore
File diff suppressed because it is too large
Load Diff
@ -65,8 +65,8 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
|
|||||||
sp_head.h sp_pcontext.h sp_rcontext.h sp.h sp_cache.h \
|
sp_head.h sp_pcontext.h sp_rcontext.h sp.h sp_cache.h \
|
||||||
parse_file.h sql_view.h sql_trigger.h \
|
parse_file.h sql_view.h sql_trigger.h \
|
||||||
sql_array.h sql_cursor.h events.h \
|
sql_array.h sql_cursor.h events.h \
|
||||||
|
event_db_repository.h event_queue.h \
|
||||||
sql_plugin.h authors.h sql_partition.h event_data_objects.h \
|
sql_plugin.h authors.h sql_partition.h event_data_objects.h \
|
||||||
event_queue.h event_db_repository.h \
|
|
||||||
partition_info.h partition_element.h event_scheduler.h \
|
partition_info.h partition_element.h event_scheduler.h \
|
||||||
contributors.h
|
contributors.h
|
||||||
mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \
|
mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \
|
||||||
@ -104,8 +104,8 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \
|
|||||||
gstream.cc spatial.cc sql_help.cc sql_cursor.cc \
|
gstream.cc spatial.cc sql_help.cc sql_cursor.cc \
|
||||||
tztime.cc my_time.c my_user.c my_decimal.cc\
|
tztime.cc my_time.c my_user.c my_decimal.cc\
|
||||||
sp_head.cc sp_pcontext.cc sp_rcontext.cc sp.cc \
|
sp_head.cc sp_pcontext.cc sp_rcontext.cc sp.cc \
|
||||||
sp_cache.cc parse_file.cc sql_trigger.cc event_scheduler.cc\
|
sp_cache.cc parse_file.cc sql_trigger.cc \
|
||||||
events.cc event_data_objects.cc \
|
event_scheduler.cc events.cc event_data_objects.cc \
|
||||||
event_queue.cc event_db_repository.cc \
|
event_queue.cc event_db_repository.cc \
|
||||||
sql_plugin.cc sql_binlog.cc \
|
sql_plugin.cc sql_binlog.cc \
|
||||||
sql_builtin.cc sql_tablespace.cc partition_info.cc
|
sql_builtin.cc sql_tablespace.cc partition_info.cc
|
||||||
|
@ -24,65 +24,12 @@
|
|||||||
|
|
||||||
#define EVEX_MAX_INTERVAL_VALUE 1000000000L
|
#define EVEX_MAX_INTERVAL_VALUE 1000000000L
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Switches the security context
|
|
||||||
SYNOPSIS
|
|
||||||
event_change_security_context()
|
|
||||||
thd Thread
|
|
||||||
user The user
|
|
||||||
host The host of the user
|
|
||||||
db The schema for which the security_ctx will be loaded
|
|
||||||
backup Where to store the old context
|
|
||||||
|
|
||||||
RETURN VALUE
|
|
||||||
FALSE OK
|
|
||||||
TRUE Error (generates error too)
|
|
||||||
*/
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
event_change_security_context(THD *thd, LEX_STRING user, LEX_STRING host,
|
event_change_security_context(THD *thd, LEX_STRING user, LEX_STRING host,
|
||||||
LEX_STRING db, Security_context *backup)
|
LEX_STRING db, Security_context *backup);
|
||||||
{
|
|
||||||
DBUG_ENTER("event_change_security_context");
|
|
||||||
DBUG_PRINT("info",("%s@%s@%s", user.str, host.str, db.str));
|
|
||||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
|
||||||
|
|
||||||
*backup= thd->main_security_ctx;
|
|
||||||
if (acl_getroot_no_password(&thd->main_security_ctx, user.str, host.str,
|
|
||||||
host.str, db.str))
|
|
||||||
{
|
|
||||||
my_error(ER_NO_SUCH_USER, MYF(0), user.str, host.str);
|
|
||||||
DBUG_RETURN(TRUE);
|
|
||||||
}
|
|
||||||
thd->security_ctx= &thd->main_security_ctx;
|
|
||||||
#endif
|
|
||||||
DBUG_RETURN(FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Restores the security context
|
|
||||||
SYNOPSIS
|
|
||||||
event_restore_security_context()
|
|
||||||
thd Thread
|
|
||||||
backup Context to switch to
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
event_restore_security_context(THD *thd, Security_context *backup)
|
event_restore_security_context(THD *thd, Security_context *backup);
|
||||||
{
|
|
||||||
DBUG_ENTER("event_restore_security_context");
|
|
||||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
|
||||||
if (backup)
|
|
||||||
{
|
|
||||||
thd->main_security_ctx= *backup;
|
|
||||||
thd->security_ctx= &thd->main_security_ctx;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
DBUG_VOID_RETURN;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Returns a new instance
|
Returns a new instance
|
||||||
@ -236,47 +183,6 @@ Event_parse_data::init_body(THD *thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Inits definer (definer_user and definer_host) during parsing.
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
Event_parse_data::init_definer()
|
|
||||||
thd Thread
|
|
||||||
*/
|
|
||||||
|
|
||||||
void
|
|
||||||
Event_parse_data::init_definer(THD *thd)
|
|
||||||
{
|
|
||||||
int definer_user_len;
|
|
||||||
int definer_host_len;
|
|
||||||
DBUG_ENTER("Event_parse_data::init_definer");
|
|
||||||
|
|
||||||
DBUG_PRINT("info",("init definer_user thd->mem_root=0x%lx "
|
|
||||||
"thd->sec_ctx->priv_user=0x%lx", thd->mem_root,
|
|
||||||
thd->security_ctx->priv_user));
|
|
||||||
|
|
||||||
definer_user_len= strlen(thd->security_ctx->priv_user);
|
|
||||||
definer_host_len= strlen(thd->security_ctx->priv_host);
|
|
||||||
|
|
||||||
/* + 1 for @ */
|
|
||||||
DBUG_PRINT("info",("init definer as whole"));
|
|
||||||
definer.length= definer_user_len + definer_host_len + 1;
|
|
||||||
definer.str= thd->alloc(definer.length + 1);
|
|
||||||
|
|
||||||
DBUG_PRINT("info",("copy the user"));
|
|
||||||
memcpy(definer.str, thd->security_ctx->priv_user, definer_user_len);
|
|
||||||
definer.str[definer_user_len]= '@';
|
|
||||||
|
|
||||||
DBUG_PRINT("info",("copy the host"));
|
|
||||||
memcpy(definer.str + definer_user_len + 1, thd->security_ctx->priv_host,
|
|
||||||
definer_host_len);
|
|
||||||
definer.str[definer.length]= '\0';
|
|
||||||
DBUG_PRINT("info",("definer [%s] initted", definer.str));
|
|
||||||
|
|
||||||
DBUG_VOID_RETURN;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Sets time for execution for one-time event.
|
Sets time for execution for one-time event.
|
||||||
|
|
||||||
@ -645,6 +551,47 @@ Event_parse_data::check_parse_data(THD *thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Inits definer (definer_user and definer_host) during parsing.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
Event_parse_data::init_definer()
|
||||||
|
thd Thread
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
Event_parse_data::init_definer(THD *thd)
|
||||||
|
{
|
||||||
|
int definer_user_len;
|
||||||
|
int definer_host_len;
|
||||||
|
DBUG_ENTER("Event_parse_data::init_definer");
|
||||||
|
|
||||||
|
DBUG_PRINT("info",("init definer_user thd->mem_root=0x%lx "
|
||||||
|
"thd->sec_ctx->priv_user=0x%lx", thd->mem_root,
|
||||||
|
thd->security_ctx->priv_user));
|
||||||
|
|
||||||
|
definer_user_len= strlen(thd->security_ctx->priv_user);
|
||||||
|
definer_host_len= strlen(thd->security_ctx->priv_host);
|
||||||
|
|
||||||
|
/* + 1 for @ */
|
||||||
|
DBUG_PRINT("info",("init definer as whole"));
|
||||||
|
definer.length= definer_user_len + definer_host_len + 1;
|
||||||
|
definer.str= thd->alloc(definer.length + 1);
|
||||||
|
|
||||||
|
DBUG_PRINT("info",("copy the user"));
|
||||||
|
memcpy(definer.str, thd->security_ctx->priv_user, definer_user_len);
|
||||||
|
definer.str[definer_user_len]= '@';
|
||||||
|
|
||||||
|
DBUG_PRINT("info",("copy the host"));
|
||||||
|
memcpy(definer.str + definer_user_len + 1, thd->security_ctx->priv_host,
|
||||||
|
definer_host_len);
|
||||||
|
definer.str[definer.length]= '\0';
|
||||||
|
DBUG_PRINT("info",("definer [%s] initted", definer.str));
|
||||||
|
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Constructor
|
Constructor
|
||||||
|
|
||||||
@ -1667,6 +1614,69 @@ Event_job_data::get_fake_create_event(THD *thd, String *buf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Executes the event (the underlying sp_head object);
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
Event_job_data::execute()
|
||||||
|
thd THD
|
||||||
|
|
||||||
|
RETURN VALUE
|
||||||
|
0 success
|
||||||
|
-99 No rights on this.dbname.str
|
||||||
|
others retcodes of sp_head::execute_procedure()
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
Event_job_data::execute(THD *thd)
|
||||||
|
{
|
||||||
|
Security_context save_ctx;
|
||||||
|
/* this one is local and not needed after exec */
|
||||||
|
int ret= 0;
|
||||||
|
|
||||||
|
DBUG_ENTER("Event_job_data::execute");
|
||||||
|
DBUG_PRINT("info", ("EXECUTING %s.%s", dbname.str, name.str));
|
||||||
|
|
||||||
|
if ((ret= compile(thd, NULL)))
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
event_change_security_context(thd, definer_user, definer_host, dbname,
|
||||||
|
&save_ctx);
|
||||||
|
/*
|
||||||
|
THD::~THD will clean this or if there is DROP DATABASE in the SP then
|
||||||
|
it will be free there. It should not point to our buffer which is allocated
|
||||||
|
on a mem_root.
|
||||||
|
*/
|
||||||
|
thd->db= my_strdup(dbname.str, MYF(0));
|
||||||
|
thd->db_length= dbname.length;
|
||||||
|
if (!check_access(thd, EVENT_ACL,dbname.str, 0, 0, 0,is_schema_db(dbname.str)))
|
||||||
|
{
|
||||||
|
List<Item> empty_item_list;
|
||||||
|
empty_item_list.empty();
|
||||||
|
if (thd->enable_slow_log)
|
||||||
|
sphead->m_flags|= sp_head::LOG_SLOW_STATEMENTS;
|
||||||
|
sphead->m_flags|= sp_head::LOG_GENERAL_LOG;
|
||||||
|
|
||||||
|
ret= sphead->execute_procedure(thd, &empty_item_list);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DBUG_PRINT("error", ("%s@%s has no rights on %s", definer_user.str,
|
||||||
|
definer_host.str, dbname.str));
|
||||||
|
ret= -99;
|
||||||
|
}
|
||||||
|
|
||||||
|
event_restore_security_context(thd, &save_ctx);
|
||||||
|
done:
|
||||||
|
thd->end_statement();
|
||||||
|
thd->cleanup_after_query();
|
||||||
|
|
||||||
|
DBUG_PRINT("info", ("EXECUTED %s.%s ret=%d", dbname.str, name.str, ret));
|
||||||
|
|
||||||
|
DBUG_RETURN(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Compiles an event before it's execution. Compiles the anonymous
|
Compiles an event before it's execution. Compiles the anonymous
|
||||||
sp_head object held by the event
|
sp_head object held by the event
|
||||||
@ -1799,69 +1809,6 @@ done:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Executes the event (the underlying sp_head object);
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
Event_job_data::execute()
|
|
||||||
thd THD
|
|
||||||
|
|
||||||
RETURN VALUE
|
|
||||||
0 success
|
|
||||||
-99 No rights on this.dbname.str
|
|
||||||
others retcodes of sp_head::execute_procedure()
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
Event_job_data::execute(THD *thd)
|
|
||||||
{
|
|
||||||
Security_context save_ctx;
|
|
||||||
/* this one is local and not needed after exec */
|
|
||||||
int ret= 0;
|
|
||||||
|
|
||||||
DBUG_ENTER("Event_job_data::execute");
|
|
||||||
DBUG_PRINT("info", ("EXECUTING %s.%s", dbname.str, name.str));
|
|
||||||
|
|
||||||
if ((ret= compile(thd, NULL)))
|
|
||||||
goto done;
|
|
||||||
|
|
||||||
event_change_security_context(thd, definer_user, definer_host, dbname,
|
|
||||||
&save_ctx);
|
|
||||||
/*
|
|
||||||
THD::~THD will clean this or if there is DROP DATABASE in the SP then
|
|
||||||
it will be free there. It should not point to our buffer which is allocated
|
|
||||||
on a mem_root.
|
|
||||||
*/
|
|
||||||
thd->db= my_strdup(dbname.str, MYF(0));
|
|
||||||
thd->db_length= dbname.length;
|
|
||||||
if (!check_access(thd, EVENT_ACL,dbname.str, 0, 0, 0,is_schema_db(dbname.str)))
|
|
||||||
{
|
|
||||||
List<Item> empty_item_list;
|
|
||||||
empty_item_list.empty();
|
|
||||||
if (thd->enable_slow_log)
|
|
||||||
sphead->m_flags|= sp_head::LOG_SLOW_STATEMENTS;
|
|
||||||
sphead->m_flags|= sp_head::LOG_GENERAL_LOG;
|
|
||||||
|
|
||||||
ret= sphead->execute_procedure(thd, &empty_item_list);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DBUG_PRINT("error", ("%s@%s has no rights on %s", definer_user.str,
|
|
||||||
definer_host.str, dbname.str));
|
|
||||||
ret= -99;
|
|
||||||
}
|
|
||||||
|
|
||||||
event_restore_security_context(thd, &save_ctx);
|
|
||||||
done:
|
|
||||||
thd->end_statement();
|
|
||||||
thd->cleanup_after_query();
|
|
||||||
|
|
||||||
DBUG_PRINT("info", ("EXECUTED %s.%s ret=%d", dbname.str, name.str, ret));
|
|
||||||
|
|
||||||
DBUG_RETURN(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Checks whether two events are in the same schema
|
Checks whether two events are in the same schema
|
||||||
|
|
||||||
@ -1899,3 +1846,62 @@ event_basic_identifier_equal(LEX_STRING db, LEX_STRING name, Event_basic *b)
|
|||||||
return !sortcmp_lex_string(name, b->name, system_charset_info) &&
|
return !sortcmp_lex_string(name, b->name, system_charset_info) &&
|
||||||
!sortcmp_lex_string(db, b->dbname, system_charset_info);
|
!sortcmp_lex_string(db, b->dbname, system_charset_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Switches the security context
|
||||||
|
SYNOPSIS
|
||||||
|
event_change_security_context()
|
||||||
|
thd Thread
|
||||||
|
user The user
|
||||||
|
host The host of the user
|
||||||
|
db The schema for which the security_ctx will be loaded
|
||||||
|
backup Where to store the old context
|
||||||
|
|
||||||
|
RETURN VALUE
|
||||||
|
FALSE OK
|
||||||
|
TRUE Error (generates error too)
|
||||||
|
*/
|
||||||
|
|
||||||
|
static bool
|
||||||
|
event_change_security_context(THD *thd, LEX_STRING user, LEX_STRING host,
|
||||||
|
LEX_STRING db, Security_context *backup)
|
||||||
|
{
|
||||||
|
DBUG_ENTER("event_change_security_context");
|
||||||
|
DBUG_PRINT("info",("%s@%s@%s", user.str, host.str, db.str));
|
||||||
|
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||||
|
|
||||||
|
*backup= thd->main_security_ctx;
|
||||||
|
if (acl_getroot_no_password(&thd->main_security_ctx, user.str, host.str,
|
||||||
|
host.str, db.str))
|
||||||
|
{
|
||||||
|
my_error(ER_NO_SUCH_USER, MYF(0), user.str, host.str);
|
||||||
|
DBUG_RETURN(TRUE);
|
||||||
|
}
|
||||||
|
thd->security_ctx= &thd->main_security_ctx;
|
||||||
|
#endif
|
||||||
|
DBUG_RETURN(FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Restores the security context
|
||||||
|
SYNOPSIS
|
||||||
|
event_restore_security_context()
|
||||||
|
thd Thread
|
||||||
|
backup Context to switch to
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
event_restore_security_context(THD *thd, Security_context *backup)
|
||||||
|
{
|
||||||
|
DBUG_ENTER("event_restore_security_context");
|
||||||
|
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||||
|
if (backup)
|
||||||
|
{
|
||||||
|
thd->main_security_ctx= *backup;
|
||||||
|
thd->security_ctx= &thd->main_security_ctx;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
@ -41,6 +41,7 @@ struct event_queue_param
|
|||||||
Event_queue *queue;
|
Event_queue *queue;
|
||||||
pthread_mutex_t LOCK_loaded;
|
pthread_mutex_t LOCK_loaded;
|
||||||
pthread_cond_t COND_loaded;
|
pthread_cond_t COND_loaded;
|
||||||
|
bool loading_finished;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -85,9 +86,14 @@ event_queue_loader_thread(void *arg)
|
|||||||
|
|
||||||
DBUG_ENTER("event_queue_loader_thread");
|
DBUG_ENTER("event_queue_loader_thread");
|
||||||
|
|
||||||
|
|
||||||
pthread_mutex_lock(¶m->LOCK_loaded);
|
pthread_mutex_lock(¶m->LOCK_loaded);
|
||||||
|
param->queue->check_system_tables(thd);
|
||||||
param->queue->load_events_from_db(thd);
|
param->queue->load_events_from_db(thd);
|
||||||
|
|
||||||
|
param->loading_finished= TRUE;
|
||||||
pthread_cond_signal(¶m->COND_loaded);
|
pthread_cond_signal(¶m->COND_loaded);
|
||||||
|
|
||||||
pthread_mutex_unlock(¶m->LOCK_loaded);
|
pthread_mutex_unlock(¶m->LOCK_loaded);
|
||||||
|
|
||||||
end:
|
end:
|
||||||
@ -113,8 +119,6 @@ Event_queue::Event_queue()
|
|||||||
mutex_last_attempted_lock_in_func= "";
|
mutex_last_attempted_lock_in_func= "";
|
||||||
|
|
||||||
mutex_queue_data_locked= mutex_queue_data_attempting_lock= FALSE;
|
mutex_queue_data_locked= mutex_queue_data_attempting_lock= FALSE;
|
||||||
|
|
||||||
queue_loaded= FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -195,8 +199,10 @@ Event_queue::init_queue(Event_db_repository *db_repo, Event_scheduler *sched)
|
|||||||
|
|
||||||
event_queue_param_value= (struct event_queue_param *)
|
event_queue_param_value= (struct event_queue_param *)
|
||||||
my_malloc(sizeof(struct event_queue_param), MYF(0));
|
my_malloc(sizeof(struct event_queue_param), MYF(0));
|
||||||
|
|
||||||
event_queue_param_value->thd= new_thd;
|
event_queue_param_value->thd= new_thd;
|
||||||
event_queue_param_value->queue= this;
|
event_queue_param_value->queue= this;
|
||||||
|
event_queue_param_value->loading_finished= FALSE;
|
||||||
pthread_mutex_init(&event_queue_param_value->LOCK_loaded, MY_MUTEX_INIT_FAST);
|
pthread_mutex_init(&event_queue_param_value->LOCK_loaded, MY_MUTEX_INIT_FAST);
|
||||||
pthread_cond_init(&event_queue_param_value->COND_loaded, NULL);
|
pthread_cond_init(&event_queue_param_value->COND_loaded, NULL);
|
||||||
|
|
||||||
@ -207,8 +213,8 @@ Event_queue::init_queue(Event_db_repository *db_repo, Event_scheduler *sched)
|
|||||||
{
|
{
|
||||||
do {
|
do {
|
||||||
pthread_cond_wait(&event_queue_param_value->COND_loaded,
|
pthread_cond_wait(&event_queue_param_value->COND_loaded,
|
||||||
&event_queue_param_value->LOCK_loaded);
|
&event_queue_param_value->LOCK_loaded);
|
||||||
} while (queue_loaded == FALSE);
|
} while (event_queue_param_value->loading_finished == FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_unlock(&event_queue_param_value->LOCK_loaded);
|
pthread_mutex_unlock(&event_queue_param_value->LOCK_loaded);
|
||||||
@ -662,8 +668,6 @@ end:
|
|||||||
|
|
||||||
close_thread_tables(thd);
|
close_thread_tables(thd);
|
||||||
|
|
||||||
queue_loaded= TRUE;
|
|
||||||
|
|
||||||
DBUG_PRINT("info", ("Status code %d. Loaded %d event(s)", ret, count));
|
DBUG_PRINT("info", ("Status code %d. Loaded %d event(s)", ret, count));
|
||||||
DBUG_RETURN(ret);
|
DBUG_RETURN(ret);
|
||||||
}
|
}
|
||||||
@ -683,7 +687,7 @@ end:
|
|||||||
TRUE Error
|
TRUE Error
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool
|
void
|
||||||
Event_queue::check_system_tables(THD *thd)
|
Event_queue::check_system_tables(THD *thd)
|
||||||
{
|
{
|
||||||
TABLE_LIST tables;
|
TABLE_LIST tables;
|
||||||
@ -702,39 +706,35 @@ Event_queue::check_system_tables(THD *thd)
|
|||||||
tables.lock_type= TL_READ;
|
tables.lock_type= TL_READ;
|
||||||
|
|
||||||
if ((ret= simple_open_n_lock_tables(thd, &tables)))
|
if ((ret= simple_open_n_lock_tables(thd, &tables)))
|
||||||
sql_print_error("Cannot open mysql.db");
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
ret= table_check_intact(tables.table, MYSQL_DB_FIELD_COUNT,
|
sql_print_error("Cannot open mysql.db");
|
||||||
mysql_db_table_fields, &mysql_db_table_last_check,
|
goto end;
|
||||||
ER_CANNOT_LOAD_FROM_TABLE);
|
|
||||||
close_thread_tables(thd);
|
|
||||||
}
|
}
|
||||||
if (ret)
|
ret= table_check_intact(tables.table, MYSQL_DB_FIELD_COUNT,
|
||||||
DBUG_RETURN(TRUE);
|
mysql_db_table_fields, &mysql_db_table_last_check,
|
||||||
|
ER_CANNOT_LOAD_FROM_TABLE);
|
||||||
|
close_thread_tables(thd);
|
||||||
|
|
||||||
bzero((char*) &tables, sizeof(tables));
|
bzero((char*) &tables, sizeof(tables));
|
||||||
tables.db= (char*) "mysql";
|
tables.db= (char*) "mysql";
|
||||||
tables.table_name= tables.alias= (char*) "user";
|
tables.table_name= tables.alias= (char*) "user";
|
||||||
tables.lock_type= TL_READ;
|
tables.lock_type= TL_READ;
|
||||||
|
|
||||||
if ((ret= simple_open_n_lock_tables(thd, &tables)))
|
if (simple_open_n_lock_tables(thd, &tables))
|
||||||
sql_print_error("Cannot open mysql.db");
|
sql_print_error("Cannot open mysql.db");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (tables.table->s->fields < 29 ||
|
if (tables.table->s->fields < 29 ||
|
||||||
strncmp(tables.table->field[29]->field_name,
|
strncmp(tables.table->field[29]->field_name,
|
||||||
STRING_WITH_LEN("Event_priv")))
|
STRING_WITH_LEN("Event_priv")))
|
||||||
{
|
|
||||||
sql_print_error("mysql.user has no `Event_priv` column at position 29");
|
sql_print_error("mysql.user has no `Event_priv` column at position 29");
|
||||||
ret= TRUE;
|
|
||||||
}
|
|
||||||
close_thread_tables(thd);
|
close_thread_tables(thd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
end:
|
||||||
thd->restore_backup_open_tables_state(&backup);
|
thd->restore_backup_open_tables_state(&backup);
|
||||||
|
|
||||||
DBUG_RETURN(ret);
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ public:
|
|||||||
void
|
void
|
||||||
drop_schema_events(THD *thd, LEX_STRING schema);
|
drop_schema_events(THD *thd, LEX_STRING schema);
|
||||||
|
|
||||||
static bool
|
void
|
||||||
check_system_tables(THD *thd);
|
check_system_tables(THD *thd);
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -99,8 +99,6 @@ protected:
|
|||||||
/* The sorted queue with the Event_job_data objects */
|
/* The sorted queue with the Event_job_data objects */
|
||||||
QUEUE queue;
|
QUEUE queue;
|
||||||
|
|
||||||
bool queue_loaded;
|
|
||||||
|
|
||||||
uint mutex_last_locked_at_line;
|
uint mutex_last_locked_at_line;
|
||||||
uint mutex_last_unlocked_at_line;
|
uint mutex_last_unlocked_at_line;
|
||||||
uint mutex_last_attempted_lock_at_line;
|
uint mutex_last_attempted_lock_at_line;
|
||||||
|
@ -28,19 +28,12 @@
|
|||||||
#define SCHED_FUNC "<unknown>"
|
#define SCHED_FUNC "<unknown>"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define LOCK_SCHEDULER_DATA() lock_data(SCHED_FUNC, __LINE__)
|
#define LOCK_DATA() lock_data(SCHED_FUNC, __LINE__)
|
||||||
#define UNLOCK_SCHEDULER_DATA() unlock_data(SCHED_FUNC, __LINE__)
|
#define UNLOCK_DATA() unlock_data(SCHED_FUNC, __LINE__)
|
||||||
#define COND_STATE_WAIT(timer) cond_wait(timer, SCHED_FUNC, __LINE__)
|
#define COND_STATE_WAIT(timer) cond_wait(timer, SCHED_FUNC, __LINE__)
|
||||||
|
|
||||||
extern pthread_attr_t connection_attrib;
|
extern pthread_attr_t connection_attrib;
|
||||||
|
|
||||||
struct scheduler_param
|
|
||||||
{
|
|
||||||
THD *thd;
|
|
||||||
Event_scheduler *scheduler;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
LEX_STRING scheduler_states_names[] =
|
LEX_STRING scheduler_states_names[] =
|
||||||
{
|
{
|
||||||
@ -49,6 +42,11 @@ LEX_STRING scheduler_states_names[] =
|
|||||||
{ C_STRING_WITH_LEN("STOPPING")}
|
{ C_STRING_WITH_LEN("STOPPING")}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct scheduler_param {
|
||||||
|
THD *thd;
|
||||||
|
Event_scheduler *scheduler;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Prints the stack of infos, warnings, errors from thd to
|
Prints the stack of infos, warnings, errors from thd to
|
||||||
@ -99,54 +97,6 @@ evex_print_warnings(THD *thd, Event_job_data *et)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Performs pre- pthread_create() initialisation of THD. Do this
|
|
||||||
in the thread that will pass THD to the child thread. In the
|
|
||||||
child thread call post_init_event_thread().
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
pre_init_event_thread()
|
|
||||||
thd The THD of the thread. Has to be allocated by the caller.
|
|
||||||
|
|
||||||
NOTES
|
|
||||||
1. The host of the thead is my_localhost
|
|
||||||
2. thd->net is initted with NULL - no communication.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void
|
|
||||||
pre_init_event_thread(THD* thd)
|
|
||||||
{
|
|
||||||
DBUG_ENTER("pre_init_event_thread");
|
|
||||||
thd->client_capabilities= 0;
|
|
||||||
thd->security_ctx->master_access= 0;
|
|
||||||
thd->security_ctx->db_access= 0;
|
|
||||||
thd->security_ctx->host_or_ip= (char*)my_localhost;
|
|
||||||
thd->security_ctx->set_user((char*)"event_scheduler");
|
|
||||||
my_net_init(&thd->net, NULL);
|
|
||||||
thd->net.read_timeout= slave_net_timeout;
|
|
||||||
thd->slave_thread= 0;
|
|
||||||
thd->options|= OPTION_AUTO_IS_NULL;
|
|
||||||
thd->client_capabilities|= CLIENT_MULTI_RESULTS;
|
|
||||||
pthread_mutex_lock(&LOCK_thread_count);
|
|
||||||
thd->thread_id= thread_id++;
|
|
||||||
threads.append(thd);
|
|
||||||
thread_count++;
|
|
||||||
thread_running++;
|
|
||||||
pthread_mutex_unlock(&LOCK_thread_count);
|
|
||||||
|
|
||||||
/*
|
|
||||||
Guarantees that we will see the thread in SHOW PROCESSLIST though its
|
|
||||||
vio is NULL.
|
|
||||||
*/
|
|
||||||
|
|
||||||
thd->proc_info= "Initialized";
|
|
||||||
thd->version= refresh_version;
|
|
||||||
thd->set_time();
|
|
||||||
|
|
||||||
DBUG_VOID_RETURN;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Performs post initialization of structures in a new thread.
|
Performs post initialization of structures in a new thread.
|
||||||
|
|
||||||
@ -201,6 +151,54 @@ deinit_event_thread(THD *thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Performs pre- pthread_create() initialisation of THD. Do this
|
||||||
|
in the thread that will pass THD to the child thread. In the
|
||||||
|
child thread call post_init_event_thread().
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
pre_init_event_thread()
|
||||||
|
thd The THD of the thread. Has to be allocated by the caller.
|
||||||
|
|
||||||
|
NOTES
|
||||||
|
1. The host of the thead is my_localhost
|
||||||
|
2. thd->net is initted with NULL - no communication.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
pre_init_event_thread(THD* thd)
|
||||||
|
{
|
||||||
|
DBUG_ENTER("pre_init_event_thread");
|
||||||
|
thd->client_capabilities= 0;
|
||||||
|
thd->security_ctx->master_access= 0;
|
||||||
|
thd->security_ctx->db_access= 0;
|
||||||
|
thd->security_ctx->host_or_ip= (char*)my_localhost;
|
||||||
|
my_net_init(&thd->net, NULL);
|
||||||
|
thd->security_ctx->set_user((char*)"event_scheduler");
|
||||||
|
thd->net.read_timeout= slave_net_timeout;
|
||||||
|
thd->slave_thread= 0;
|
||||||
|
thd->options|= OPTION_AUTO_IS_NULL;
|
||||||
|
thd->client_capabilities|= CLIENT_MULTI_RESULTS;
|
||||||
|
pthread_mutex_lock(&LOCK_thread_count);
|
||||||
|
thd->thread_id= thread_id++;
|
||||||
|
threads.append(thd);
|
||||||
|
thread_count++;
|
||||||
|
thread_running++;
|
||||||
|
pthread_mutex_unlock(&LOCK_thread_count);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Guarantees that we will see the thread in SHOW PROCESSLIST though its
|
||||||
|
vio is NULL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
thd->proc_info= "Initialized";
|
||||||
|
thd->version= refresh_version;
|
||||||
|
thd->set_time();
|
||||||
|
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Function that executes the scheduler,
|
Function that executes the scheduler,
|
||||||
|
|
||||||
@ -259,33 +257,32 @@ event_worker_thread(void *arg)
|
|||||||
thd->thread_stack= (char *) &thd; // remember where our stack is
|
thd->thread_stack= (char *) &thd; // remember where our stack is
|
||||||
DBUG_ENTER("event_worker_thread");
|
DBUG_ENTER("event_worker_thread");
|
||||||
|
|
||||||
if (post_init_event_thread(thd))
|
if (!post_init_event_thread(thd))
|
||||||
goto end;
|
{
|
||||||
|
DBUG_PRINT("info", ("Baikonur, time is %d, BURAN reporting and operational."
|
||||||
|
"THD=0x%lx", time(NULL), thd));
|
||||||
|
|
||||||
DBUG_PRINT("info", ("Baikonur, time is %d, BURAN reporting and operational."
|
sql_print_information("SCHEDULER: [%s.%s of %s] executing in thread %lu",
|
||||||
"THD=0x%lx", time(NULL), thd));
|
|
||||||
|
|
||||||
sql_print_information("SCHEDULER: [%s.%s of %s] executing in thread %lu",
|
|
||||||
event->dbname.str, event->name.str,
|
|
||||||
event->definer.str, thd->thread_id);
|
|
||||||
|
|
||||||
thd->enable_slow_log= TRUE;
|
|
||||||
|
|
||||||
ret= event->execute(thd);
|
|
||||||
|
|
||||||
evex_print_warnings(thd, event);
|
|
||||||
|
|
||||||
sql_print_information("SCHEDULER: [%s.%s of %s] executed "
|
|
||||||
" in thread thread %lu. RetCode=%d",
|
|
||||||
event->dbname.str, event->name.str,
|
|
||||||
event->definer.str, thd->thread_id, ret);
|
|
||||||
if (ret == EVEX_COMPILE_ERROR)
|
|
||||||
sql_print_information("SCHEDULER: COMPILE ERROR for event %s.%s of %s",
|
|
||||||
event->dbname.str, event->name.str,
|
event->dbname.str, event->name.str,
|
||||||
event->definer.str);
|
event->definer.str, thd->thread_id);
|
||||||
else if (ret == EVEX_MICROSECOND_UNSUP)
|
|
||||||
sql_print_information("SCHEDULER: MICROSECOND is not supported");
|
|
||||||
|
|
||||||
|
thd->enable_slow_log= TRUE;
|
||||||
|
|
||||||
|
ret= event->execute(thd);
|
||||||
|
|
||||||
|
evex_print_warnings(thd, event);
|
||||||
|
|
||||||
|
sql_print_information("SCHEDULER: [%s.%s of %s] executed "
|
||||||
|
" in thread thread %lu. RetCode=%d",
|
||||||
|
event->dbname.str, event->name.str,
|
||||||
|
event->definer.str, thd->thread_id, ret);
|
||||||
|
if (ret == EVEX_COMPILE_ERROR)
|
||||||
|
sql_print_information("SCHEDULER: COMPILE ERROR for event %s.%s of %s",
|
||||||
|
event->dbname.str, event->name.str,
|
||||||
|
event->definer.str);
|
||||||
|
else if (ret == EVEX_MICROSECOND_UNSUP)
|
||||||
|
sql_print_information("SCHEDULER: MICROSECOND is not supported");
|
||||||
|
}
|
||||||
end:
|
end:
|
||||||
DBUG_PRINT("info", ("BURAN %s.%s is landing!", event->dbname.str,
|
DBUG_PRINT("info", ("BURAN %s.%s is landing!", event->dbname.str,
|
||||||
event->name.str));
|
event->name.str));
|
||||||
@ -293,7 +290,7 @@ end:
|
|||||||
|
|
||||||
deinit_event_thread(thd);
|
deinit_event_thread(thd);
|
||||||
|
|
||||||
DBUG_RETURN(0); // Against gcc warnings
|
DBUG_RETURN(0); // Can't return anything here
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -305,17 +302,15 @@ end:
|
|||||||
Event_scheduler::init_scheduler()
|
Event_scheduler::init_scheduler()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool
|
void
|
||||||
Event_scheduler::init_scheduler(Event_queue *q)
|
Event_scheduler::init_scheduler(Event_queue *q)
|
||||||
{
|
{
|
||||||
LOCK_SCHEDULER_DATA();
|
LOCK_DATA();
|
||||||
thread_id= 0;
|
|
||||||
state= INITIALIZED;
|
|
||||||
queue= q;
|
queue= q;
|
||||||
started_events= 0;
|
started_events= 0;
|
||||||
UNLOCK_SCHEDULER_DATA();
|
thread_id= 0;
|
||||||
|
state= INITIALIZED;
|
||||||
return FALSE;
|
UNLOCK_DATA();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -377,7 +372,7 @@ Event_scheduler::start()
|
|||||||
struct scheduler_param *scheduler_param_value;
|
struct scheduler_param *scheduler_param_value;
|
||||||
DBUG_ENTER("Event_scheduler::start");
|
DBUG_ENTER("Event_scheduler::start");
|
||||||
|
|
||||||
LOCK_SCHEDULER_DATA();
|
LOCK_DATA();
|
||||||
DBUG_PRINT("info", ("state before action %s", scheduler_states_names[state]));
|
DBUG_PRINT("info", ("state before action %s", scheduler_states_names[state]));
|
||||||
if (state > INITIALIZED)
|
if (state > INITIALIZED)
|
||||||
goto end;
|
goto end;
|
||||||
@ -408,7 +403,7 @@ Event_scheduler::start()
|
|||||||
DBUG_PRINT("info", ("Setting state go RUNNING"));
|
DBUG_PRINT("info", ("Setting state go RUNNING"));
|
||||||
state= RUNNING;
|
state= RUNNING;
|
||||||
end:
|
end:
|
||||||
UNLOCK_SCHEDULER_DATA();
|
UNLOCK_DATA();
|
||||||
|
|
||||||
if (ret && new_thd)
|
if (ret && new_thd)
|
||||||
{
|
{
|
||||||
@ -426,56 +421,6 @@ end:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Stops the scheduler (again). Waits for acknowledgement from the
|
|
||||||
scheduler that it has stopped - synchronous stopping.
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
Event_scheduler::stop()
|
|
||||||
|
|
||||||
RETURN VALUE
|
|
||||||
FALSE OK
|
|
||||||
TRUE Error (not reported)
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool
|
|
||||||
Event_scheduler::stop()
|
|
||||||
{
|
|
||||||
THD *thd= current_thd;
|
|
||||||
DBUG_ENTER("Event_scheduler::stop");
|
|
||||||
DBUG_PRINT("enter", ("thd=0x%lx", current_thd));
|
|
||||||
|
|
||||||
LOCK_SCHEDULER_DATA();
|
|
||||||
DBUG_PRINT("info", ("state before action %s", scheduler_states_names[state]));
|
|
||||||
if (state != RUNNING)
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
state= STOPPING;
|
|
||||||
|
|
||||||
DBUG_PRINT("info", ("Manager thread has id %d", thread_id));
|
|
||||||
sql_print_information("SCHEDULER: Killing manager thread %lu", thread_id);
|
|
||||||
|
|
||||||
pthread_cond_signal(&COND_state);
|
|
||||||
|
|
||||||
/* Guarantee we don't catch spurious signals */
|
|
||||||
sql_print_information("SCHEDULER: Waiting the manager thread to reply");
|
|
||||||
do {
|
|
||||||
DBUG_PRINT("info", ("Waiting for COND_started_or_stopped from the manager "
|
|
||||||
"thread. Current value of state is %s . "
|
|
||||||
"workers count=%d", scheduler_states_names[state].str,
|
|
||||||
workers_count()));
|
|
||||||
/* thd could be 0x0, when shutting down */
|
|
||||||
COND_STATE_WAIT(NULL);
|
|
||||||
} while (state == STOPPING);
|
|
||||||
DBUG_PRINT("info", ("Manager thread has cleaned up. Set state to INIT"));
|
|
||||||
|
|
||||||
thread_id= 0;
|
|
||||||
end:
|
|
||||||
UNLOCK_SCHEDULER_DATA();
|
|
||||||
DBUG_RETURN(FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The main loop of the scheduler.
|
The main loop of the scheduler.
|
||||||
|
|
||||||
@ -496,7 +441,7 @@ Event_scheduler::run(THD *thd)
|
|||||||
Event_job_data *job_data;
|
Event_job_data *job_data;
|
||||||
DBUG_ENTER("Event_scheduler::run");
|
DBUG_ENTER("Event_scheduler::run");
|
||||||
|
|
||||||
LOCK_SCHEDULER_DATA();
|
LOCK_DATA();
|
||||||
|
|
||||||
thread_id= thd->thread_id;
|
thread_id= thd->thread_id;
|
||||||
sql_print_information("SCHEDULER: Manager thread started with id %lu",
|
sql_print_information("SCHEDULER: Manager thread started with id %lu",
|
||||||
@ -529,7 +474,7 @@ Event_scheduler::run(THD *thd)
|
|||||||
COND_STATE_WAIT(NULL);
|
COND_STATE_WAIT(NULL);
|
||||||
thd->exit_cond("");
|
thd->exit_cond("");
|
||||||
DBUG_PRINT("info", ("Woke up. Got COND_state"));
|
DBUG_PRINT("info", ("Woke up. Got COND_state"));
|
||||||
LOCK_SCHEDULER_DATA();
|
LOCK_DATA();
|
||||||
}
|
}
|
||||||
else if (abstime.tv_sec)
|
else if (abstime.tv_sec)
|
||||||
{
|
{
|
||||||
@ -545,16 +490,16 @@ Event_scheduler::run(THD *thd)
|
|||||||
1. Spurious wake-up
|
1. Spurious wake-up
|
||||||
2. The top of the queue was changed (new one becase of create/update)
|
2. The top of the queue was changed (new one becase of create/update)
|
||||||
*/
|
*/
|
||||||
/* This will do implicit UNLOCK_SCHEDULER_DATA() */
|
/* This will do implicit UNLOCK_DATA() */
|
||||||
thd->exit_cond("");
|
thd->exit_cond("");
|
||||||
DBUG_PRINT("info", ("Woke up. Got COND_stat or time for execution."));
|
DBUG_PRINT("info", ("Woke up. Got COND_stat or time for execution."));
|
||||||
LOCK_SCHEDULER_DATA();
|
LOCK_DATA();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UNLOCK_SCHEDULER_DATA();
|
UNLOCK_DATA();
|
||||||
res= execute_top(thd, job_data);
|
res= execute_top(thd, job_data);
|
||||||
LOCK_SCHEDULER_DATA();
|
LOCK_DATA();
|
||||||
if (res)
|
if (res)
|
||||||
break;
|
break;
|
||||||
++started_events;
|
++started_events;
|
||||||
@ -565,7 +510,7 @@ Event_scheduler::run(THD *thd)
|
|||||||
pthread_cond_signal(&COND_state);
|
pthread_cond_signal(&COND_state);
|
||||||
error:
|
error:
|
||||||
state= INITIALIZED;
|
state= INITIALIZED;
|
||||||
UNLOCK_SCHEDULER_DATA();
|
UNLOCK_DATA();
|
||||||
sql_print_information("SCHEDULER: Stopped");
|
sql_print_information("SCHEDULER: Stopped");
|
||||||
|
|
||||||
DBUG_RETURN(res);
|
DBUG_RETURN(res);
|
||||||
@ -627,23 +572,52 @@ error:
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Returns the current state of the scheduler
|
Stops the scheduler (again). Waits for acknowledgement from the
|
||||||
|
scheduler that it has stopped - synchronous stopping.
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
Event_scheduler::get_state()
|
Event_scheduler::stop()
|
||||||
|
|
||||||
RETURN VALUE
|
RETURN VALUE
|
||||||
The state of the scheduler (INITIALIZED | RUNNING | STOPPING)
|
FALSE OK
|
||||||
|
TRUE Error (not reported)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum Event_scheduler::enum_state
|
bool
|
||||||
Event_scheduler::get_state()
|
Event_scheduler::stop()
|
||||||
{
|
{
|
||||||
enum Event_scheduler::enum_state ret;
|
THD *thd= current_thd;
|
||||||
LOCK_SCHEDULER_DATA();
|
DBUG_ENTER("Event_scheduler::stop");
|
||||||
ret= state;
|
DBUG_PRINT("enter", ("thd=0x%lx", current_thd));
|
||||||
UNLOCK_SCHEDULER_DATA();
|
|
||||||
return ret;
|
LOCK_DATA();
|
||||||
|
DBUG_PRINT("info", ("state before action %s", scheduler_states_names[state]));
|
||||||
|
if (state != RUNNING)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
state= STOPPING;
|
||||||
|
|
||||||
|
DBUG_PRINT("info", ("Manager thread has id %d", thread_id));
|
||||||
|
sql_print_information("SCHEDULER: Killing manager thread %lu", thread_id);
|
||||||
|
|
||||||
|
pthread_cond_signal(&COND_state);
|
||||||
|
|
||||||
|
/* Guarantee we don't catch spurious signals */
|
||||||
|
sql_print_information("SCHEDULER: Waiting the manager thread to reply");
|
||||||
|
do {
|
||||||
|
DBUG_PRINT("info", ("Waiting for COND_started_or_stopped from the manager "
|
||||||
|
"thread. Current value of state is %s . "
|
||||||
|
"workers count=%d", scheduler_states_names[state].str,
|
||||||
|
workers_count()));
|
||||||
|
/* thd could be 0x0, when shutting down */
|
||||||
|
COND_STATE_WAIT(NULL);
|
||||||
|
} while (state == STOPPING);
|
||||||
|
DBUG_PRINT("info", ("Manager thread has cleaned up. Set state to INIT"));
|
||||||
|
|
||||||
|
thread_id= 0;
|
||||||
|
end:
|
||||||
|
UNLOCK_DATA();
|
||||||
|
DBUG_RETURN(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -697,7 +671,7 @@ Event_scheduler::queue_changed()
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Auxiliary function for locking LOCK_scheduler_state. Used
|
Auxiliary function for locking LOCK_scheduler_state. Used
|
||||||
by the LOCK_SCHEDULER_DATA macro.
|
by the LOCK_DATA macro.
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
Event_scheduler::lock_data()
|
Event_scheduler::lock_data()
|
||||||
@ -720,7 +694,7 @@ Event_scheduler::lock_data(const char *func, uint line)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Auxiliary function for unlocking LOCK_scheduler_state. Used
|
Auxiliary function for unlocking LOCK_scheduler_state. Used
|
||||||
by the UNLOCK_SCHEDULER_DATA macro.
|
by the UNLOCK_DATA macro.
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
Event_scheduler::unlock_data()
|
Event_scheduler::unlock_data()
|
||||||
@ -754,29 +728,51 @@ Event_scheduler::unlock_data(const char *func, uint line)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
Event_scheduler::cond_wait(struct timespec *abstime,
|
Event_scheduler::cond_wait(struct timespec *abstime, const char *func,
|
||||||
const char *func, uint line)
|
uint line)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("Event_scheduler::cond_wait");
|
|
||||||
waiting_on_cond= TRUE;
|
waiting_on_cond= TRUE;
|
||||||
mutex_last_unlocked_at_line= line;
|
mutex_last_unlocked_at_line= line;
|
||||||
mutex_scheduler_data_locked= FALSE;
|
mutex_scheduler_data_locked= FALSE;
|
||||||
mutex_last_unlocked_in_func= func;
|
mutex_last_unlocked_in_func= func;
|
||||||
|
if (!abstime)
|
||||||
if (abstime)
|
|
||||||
pthread_cond_timedwait(&COND_state, &LOCK_scheduler_state, abstime);
|
|
||||||
else
|
|
||||||
pthread_cond_wait(&COND_state, &LOCK_scheduler_state);
|
pthread_cond_wait(&COND_state, &LOCK_scheduler_state);
|
||||||
|
else
|
||||||
|
pthread_cond_timedwait(&COND_state, &LOCK_scheduler_state, abstime);
|
||||||
mutex_last_locked_in_func= func;
|
mutex_last_locked_in_func= func;
|
||||||
mutex_last_locked_at_line= line;
|
mutex_last_locked_at_line= line;
|
||||||
mutex_scheduler_data_locked= TRUE;
|
mutex_scheduler_data_locked= TRUE;
|
||||||
waiting_on_cond= FALSE;
|
waiting_on_cond= FALSE;
|
||||||
|
|
||||||
DBUG_VOID_RETURN;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Returns the current state of the scheduler
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
Event_scheduler::get_state()
|
||||||
|
|
||||||
|
RETURN VALUE
|
||||||
|
The state of the scheduler (INITIALIZED | RUNNING | STOPPING)
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum Event_scheduler::enum_state
|
||||||
|
Event_scheduler::get_state()
|
||||||
|
{
|
||||||
|
enum Event_scheduler::enum_state ret;
|
||||||
|
DBUG_ENTER("Event_scheduler::get_state");
|
||||||
|
LOCK_DATA();
|
||||||
|
ret= state;
|
||||||
|
UNLOCK_DATA();
|
||||||
|
DBUG_RETURN(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
REMOVE THIS COMMENT AFTER PATCH REVIEW. USED TO HELP DIFF
|
||||||
|
Returns whether the scheduler was initialized.
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Dumps the internal status of the scheduler
|
Dumps the internal status of the scheduler
|
||||||
|
|
||||||
@ -805,80 +801,82 @@ Event_scheduler::dump_internal_status(THD *thd)
|
|||||||
tmp_string.length(0);
|
tmp_string.length(0);
|
||||||
int_string.length(0);
|
int_string.length(0);
|
||||||
|
|
||||||
protocol->prepare_for_resend();
|
do
|
||||||
protocol->store(STRING_WITH_LEN("scheduler state"), scs);
|
|
||||||
protocol->store(scheduler_states_names[state].str,
|
|
||||||
scheduler_states_names[state].length, scs);
|
|
||||||
|
|
||||||
if ((ret= protocol->write()))
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
/* thread_id */
|
|
||||||
protocol->prepare_for_resend();
|
|
||||||
protocol->store(STRING_WITH_LEN("thread_id"), scs);
|
|
||||||
if (thread_id)
|
|
||||||
{
|
{
|
||||||
int_string.set((longlong) thread_id, scs);
|
protocol->prepare_for_resend();
|
||||||
|
protocol->store(STRING_WITH_LEN("scheduler state"), scs);
|
||||||
|
protocol->store(scheduler_states_names[state].str,
|
||||||
|
scheduler_states_names[state].length, scs);
|
||||||
|
|
||||||
|
if ((ret= protocol->write()))
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* thread_id */
|
||||||
|
protocol->prepare_for_resend();
|
||||||
|
protocol->store(STRING_WITH_LEN("thread_id"), scs);
|
||||||
|
if (thread_id)
|
||||||
|
{
|
||||||
|
int_string.set((longlong) thread_id, scs);
|
||||||
|
protocol->store(&int_string);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
protocol->store_null();
|
||||||
|
if ((ret= protocol->write()))
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* last locked at*/
|
||||||
|
protocol->prepare_for_resend();
|
||||||
|
protocol->store(STRING_WITH_LEN("scheduler last locked at"), scs);
|
||||||
|
tmp_string.length(scs->cset->snprintf(scs, (char*) tmp_string.ptr(),
|
||||||
|
tmp_string.alloced_length(), "%s::%d",
|
||||||
|
mutex_last_locked_in_func,
|
||||||
|
mutex_last_locked_at_line));
|
||||||
|
protocol->store(&tmp_string);
|
||||||
|
if ((ret= protocol->write()))
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* last unlocked at*/
|
||||||
|
protocol->prepare_for_resend();
|
||||||
|
protocol->store(STRING_WITH_LEN("scheduler last unlocked at"), scs);
|
||||||
|
tmp_string.length(scs->cset->snprintf(scs, (char*) tmp_string.ptr(),
|
||||||
|
tmp_string.alloced_length(), "%s::%d",
|
||||||
|
mutex_last_unlocked_in_func,
|
||||||
|
mutex_last_unlocked_at_line));
|
||||||
|
protocol->store(&tmp_string);
|
||||||
|
if ((ret= protocol->write()))
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* waiting on */
|
||||||
|
protocol->prepare_for_resend();
|
||||||
|
protocol->store(STRING_WITH_LEN("scheduler waiting on condition"), scs);
|
||||||
|
int_string.set((longlong) waiting_on_cond, scs);
|
||||||
protocol->store(&int_string);
|
protocol->store(&int_string);
|
||||||
}
|
if ((ret= protocol->write()))
|
||||||
else
|
break;
|
||||||
protocol->store_null();
|
|
||||||
if ((ret= protocol->write()))
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
/* last locked at*/
|
/* workers_count */
|
||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(STRING_WITH_LEN("scheduler last locked at"), scs);
|
protocol->store(STRING_WITH_LEN("scheduler workers count"), scs);
|
||||||
tmp_string.length(scs->cset->snprintf(scs, (char*) tmp_string.ptr(),
|
int_string.set((longlong) workers_count(), scs);
|
||||||
tmp_string.alloced_length(), "%s::%d",
|
protocol->store(&int_string);
|
||||||
mutex_last_locked_in_func,
|
if ((ret= protocol->write()))
|
||||||
mutex_last_locked_at_line));
|
break;
|
||||||
protocol->store(&tmp_string);
|
|
||||||
if ((ret= protocol->write()))
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
/* last unlocked at*/
|
/* workers_count */
|
||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(STRING_WITH_LEN("scheduler last unlocked at"), scs);
|
protocol->store(STRING_WITH_LEN("scheduler executed events"), scs);
|
||||||
tmp_string.length(scs->cset->snprintf(scs, (char*) tmp_string.ptr(),
|
int_string.set((longlong) started_events, scs);
|
||||||
tmp_string.alloced_length(), "%s::%d",
|
protocol->store(&int_string);
|
||||||
mutex_last_unlocked_in_func,
|
if ((ret= protocol->write()))
|
||||||
mutex_last_unlocked_at_line));
|
break;
|
||||||
protocol->store(&tmp_string);
|
|
||||||
if ((ret= protocol->write()))
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
/* waiting on */
|
/* scheduler_data_locked */
|
||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(STRING_WITH_LEN("scheduler waiting on condition"), scs);
|
protocol->store(STRING_WITH_LEN("scheduler data locked"), scs);
|
||||||
int_string.set((longlong) waiting_on_cond, scs);
|
int_string.set((longlong) mutex_scheduler_data_locked, scs);
|
||||||
protocol->store(&int_string);
|
protocol->store(&int_string);
|
||||||
if ((ret= protocol->write()))
|
ret= protocol->write();
|
||||||
goto end;
|
} while (0);
|
||||||
|
|
||||||
/* workers_count */
|
|
||||||
protocol->prepare_for_resend();
|
|
||||||
protocol->store(STRING_WITH_LEN("scheduler workers count"), scs);
|
|
||||||
int_string.set((longlong) workers_count(), scs);
|
|
||||||
protocol->store(&int_string);
|
|
||||||
if ((ret= protocol->write()))
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
/* workers_count */
|
|
||||||
protocol->prepare_for_resend();
|
|
||||||
protocol->store(STRING_WITH_LEN("scheduler executed events"), scs);
|
|
||||||
int_string.set((longlong) started_events, scs);
|
|
||||||
protocol->store(&int_string);
|
|
||||||
if ((ret= protocol->write()))
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
/* scheduler_data_locked */
|
|
||||||
protocol->prepare_for_resend();
|
|
||||||
protocol->store(STRING_WITH_LEN("scheduler data locked"), scs);
|
|
||||||
int_string.set((longlong) mutex_scheduler_data_locked, scs);
|
|
||||||
protocol->store(&int_string);
|
|
||||||
ret= protocol->write();
|
|
||||||
end:
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
DBUG_RETURN(ret);
|
DBUG_RETURN(ret);
|
||||||
|
@ -56,7 +56,7 @@ public:
|
|||||||
bool
|
bool
|
||||||
run(THD *thd);
|
run(THD *thd);
|
||||||
|
|
||||||
bool
|
void
|
||||||
init_scheduler(Event_queue *queue);
|
init_scheduler(Event_queue *queue);
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user