~mdcallag/+junk/5.1-map

« back to all changes in this revision

Viewing changes to sql/mysqld.cc

  • Committer: sasha at sashanet
  • Date: 2001-04-12 01:09:00 UTC
  • mfrom: (669.1.1)
  • Revision ID: sp1r-sasha@mysql.sashanet.com-20010412010900-14282
Ugly merge of 3.23 changes into 4.0 - fix up needed

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
#define ONE_THREAD
39
39
#endif
40
40
 
 
41
/* do stack traces are only supported on linux intel */
 
42
#if defined(__linux__)  && defined(__i386__) && defined(USE_PSTACK)
 
43
#define HAVE_STACK_TRACE_ON_SEGV
 
44
#include "../pstack/pstack.h"
 
45
char pstack_file_name[80];
 
46
#endif /* __linux__ */
 
47
 
41
48
extern "C" {                                    // Because of SCO 3.2V4.2
42
49
#include <errno.h>
43
50
#include <sys/stat.h>
180
187
 
181
188
 
182
189
static bool opt_skip_slave_start = 0; // if set, slave is not autostarted
 
190
static bool opt_do_pstack = 0;
183
191
static ulong opt_specialflag=SPECIAL_ENGLISH;
184
192
static my_socket unix_sock= INVALID_SOCKET,ip_sock= INVALID_SOCKET;
185
193
static ulong back_log,connect_timeout,concurrency;
227
235
bool server_id_supplied = 0;
228
236
 
229
237
uint mysql_port;
230
 
uint test_flags, select_errors=0, dropping_tables=0,ha_open_options=0;
 
238
uint test_flags = 0, select_errors=0, dropping_tables=0,ha_open_options=0;
231
239
uint volatile thread_count=0, thread_running=0, kill_cached_threads=0,
232
240
              wake_thread=0, global_read_lock=0;
233
241
ulong thd_startup_options=(OPTION_UPDATE_LOG | OPTION_AUTO_IS_NULL |
1106
1114
#ifdef HAVE_LINUXTHREADS
1107
1115
static sig_handler write_core(int sig);
1108
1116
 
1109
 
#ifdef __i386__
 
1117
#if defined(__i386__) && !defined(HAVE_STACK_TRACE_ON_SEGV)
1110
1118
#define SIGRETURN_FRAME_COUNT  1
1111
1119
#define PTR_SANE(p) ((char*)p >= heap_start && (char*)p <= heap_end)
1112
1120
 
1117
1125
                                   const char* val, int max_len)
1118
1126
{
1119
1127
  fprintf(stderr, "%s at %p ", name, val);
1120
 
  if(!PTR_SANE(val))
1121
 
    {
1122
 
      fprintf(stderr, " is invalid pointer\n");
1123
 
      return;
1124
 
    }
 
1128
  if (!PTR_SANE(val))
 
1129
  {
 
1130
    fprintf(stderr, " is invalid pointer\n");
 
1131
    return;
 
1132
  }
1125
1133
 
1126
1134
  fprintf(stderr, "= ");
1127
 
  for(; max_len && PTR_SANE(val) && *val; --max_len)
 
1135
  for (; max_len && PTR_SANE(val) && *val; --max_len)
1128
1136
    fputc(*val++, stderr);
1129
1137
  fputc('\n', stderr);
1130
1138
}
1184
1192
    ebp = new_ebp;
1185
1193
    ++frame_count;
1186
1194
  }
1187
 
 
1188
 
  fprintf(stderr, "Stack trace successful, trying to get some variables.\n\
 
1195
  fprintf(stderr, "Stack trace successful, tryint to get some variables.\n\
1189
1196
Some pointers may be invalid and cause the dump to abort...\n");
1190
1197
  heap_start = __bss_start; 
1191
1198
  heap_end = (char*)sbrk(0);
1198
1205
  fprintf(stderr, "Please use the information above to create a repeatable\n\
1199
1206
test case for the crash, and send it to bugs@lists.mysql.com\n");
1200
1207
}
1201
 
#endif
 
1208
#endif /* HAVE_LINUXTHREADS */
1202
1209
#endif
1203
1210
 
1204
1211
static sig_handler handle_segfault(int sig)
1216
1223
stack trace and/or the core file to produce a readable backtrace that may\n\
1217
1224
help in finding out why mysqld died.\n",sig);
1218
1225
#if defined(HAVE_LINUXTHREADS)
1219
 
#ifdef __i386__
 
1226
#if defined(__i386__) && !defined(HAVE_STACK_TRACE_ON_SEGV)
1220
1227
  trace_stack();
1221
 
  fflush(stderr);
1222
 
#endif /* __i386__ */
 
1228
  fflush(stderr); 
 
1229
#endif /* __i386__ && !HAVE_STACK_TRACE_ON_SEGV */
1223
1230
 if (test_flags & TEST_CORE_ON_SIGNAL)
1224
1231
   write_core(sig);
1225
1232
#endif /* HAVE_LINUXTHREADS */
1354
1361
      (void) my_close(pidFile,MYF(0));
1355
1362
    }
1356
1363
  }
 
1364
#ifdef HAVE_STACK_TRACE_ON_SEGV
 
1365
  if (opt_do_pstack)
 
1366
  {
 
1367
    sprintf(pstack_file_name,"mysqld-%lu-%%d-%%d.backtrace", (ulong)getpid());
 
1368
    pstack_install_segv_action(pstack_file_name);
 
1369
  }
 
1370
#endif /* HAVE_STACK_TRACE_ON_SEGV */
1357
1371
 
1358
1372
  // signal to start_signal_handler that we are ready
1359
1373
  (void) pthread_mutex_lock(&LOCK_thread_count);
1761
1775
             LOG_BIN);
1762
1776
    using_update_log=1;
1763
1777
  }
1764
 
  
 
1778
 
1765
1779
  if (opt_slow_log)
1766
1780
    open_log(&mysql_slow_log, glob_hostname, opt_slow_logname, "-slow.log",
1767
1781
             LOG_NORMAL);
1783
1797
  }
1784
1798
#else
1785
1799
  locked_in_memory=0;
1786
 
#endif    
 
1800
#endif
1787
1801
 
1788
1802
  if (opt_myisam_log)
1789
1803
    (void) mi_log( 1 );
2037
2051
  if (pthread_create(&thd->real_id,&connection_attrib,handle_bootstrap,
2038
2052
                     (void*) thd))
2039
2053
  {
2040
 
    sql_print_error("Warning: Can't create thread to handle bootstrap");    
 
2054
    sql_print_error("Warning: Can't create thread to handle bootstrap");
2041
2055
    return -1;
2042
2056
  }
2043
2057
  /* Wait for thread to die */
2475
2489
               OPT_INNOBASE_FLUSH_LOG_AT_TRX_COMMIT, 
2476
2490
               OPT_SAFE_SHOW_DB,
2477
2491
               OPT_GEMINI_SKIP, OPT_INNOBASE_SKIP,
2478
 
               OPT_TEMP_POOL, OPT_TX_ISOLATION,
 
2492
               OPT_TEMP_POOL, OPT_DO_PSTACK, OPT_TX_ISOLATION,
2479
2493
               OPT_GEMINI_FLUSH_LOG, OPT_GEMINI_RECOVER,
2480
2494
               OPT_GEMINI_UNBUFFERED_IO, OPT_SKIP_SAFEMALLOC,
2481
2495
};
2511
2525
  {"default-table-type",    required_argument, 0, (int) OPT_TABLE_TYPE},
2512
2526
  {"delay-key-write-for-all-tables",
2513
2527
                            no_argument,       0, (int) OPT_DELAY_KEY_WRITE},
 
2528
  {"do-pstack",
 
2529
                            no_argument,       0, (int) OPT_DO_PSTACK},
2514
2530
  {"enable-locking",        no_argument,       0, (int) OPT_ENABLE_LOCK},
2515
2531
  {"exit-info",             optional_argument, 0, 'T'},
2516
2532
  {"flush",                 no_argument,       0, (int) OPT_FLUSH},
2564
2580
#if !defined(DBUG_OFF) && defined(SAFEMALLOC)
2565
2581
  {"safemalloc-mem-limit",  required_argument, 0, (int)
2566
2582
     OPT_SAFEMALLOC_MEM_LIMIT},
2567
 
#endif    
 
2583
#endif
2568
2584
  {"new",                   no_argument,       0, 'n'},
2569
2585
  {"old-protocol",          no_argument,       0, 'o'},
2570
2586
#ifdef ONE_THREAD
2732
2748
      16384, 1024, 1024*1024L, MALLOC_OVERHEAD, 1024 },
2733
2749
  { "net_retry_count",         (long*) &mysqld_net_retry_count,
2734
2750
      MYSQLD_NET_RETRY_COUNT, 1, ~0L, 0, 1 },
2735
 
  { "net_read_timeout",        (long*) &net_read_timeout, 
 
2751
  { "net_read_timeout",        (long*) &net_read_timeout,
2736
2752
      NET_READ_TIMEOUT, 1, 65535, 0, 1 },
2737
2753
  { "net_write_timeout",       (long*) &net_write_timeout,
2738
2754
      NET_WRITE_TIMEOUT, 1, 65535, 0, 1 },
2742
2758
      0, MALLOC_OVERHEAD, (long) ~0, MALLOC_OVERHEAD, IO_SIZE },
2743
2759
  { "record_buffer",           (long*) &my_default_record_cache_size,
2744
2760
      128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, ~0L, MALLOC_OVERHEAD, IO_SIZE },
2745
 
  { "slow_launch_time",        (long*) &slow_launch_time, 
 
2761
  { "slow_launch_time",        (long*) &slow_launch_time,
2746
2762
      2L, 0L, ~0L, 0, 1 },
2747
2763
  { "sort_buffer",             (long*) &sortbuff_size,
2748
2764
      MAX_SORT_MEMORY, MIN_SORT_MEMORY+MALLOC_OVERHEAD*2, ~0L, MALLOC_OVERHEAD, 1 },
2817
2833
  {"join_buffer_size",        (char*) &join_buff_size,              SHOW_LONG},
2818
2834
  {"key_buffer_size",         (char*) &keybuff_size,                SHOW_LONG},
2819
2835
  {"language",                language,                             SHOW_CHAR},
2820
 
  {"large_files_support",     (char*) &opt_large_files,             SHOW_BOOL}, 
 
2836
  {"large_files_support",     (char*) &opt_large_files,             SHOW_BOOL},
2821
2837
#ifdef HAVE_MLOCKALL
2822
2838
  {"locked_in_memory",        (char*) &locked_in_memory,            SHOW_BOOL},
2823
2839
#endif
2949
2965
{
2950
2966
  print_version();
2951
2967
  printf("Use '--help' or '--no-defaults --help' for a list of available options\n");
2952
 
}  
 
2968
}
2953
2969
 
2954
2970
static void usage(void)
2955
2971
{
3220
3236
    case 'P':
3221
3237
      mysql_port= (unsigned int) atoi(optarg);
3222
3238
      break;
3223
 
#if !defined(DBUG_OFF) && defined(SAFEMALLOC)      
 
3239
#if !defined(DBUG_OFF) && defined(SAFEMALLOC)
3224
3240
    case OPT_SAFEMALLOC_MEM_LIMIT:
3225
3241
      safemalloc_mem_limit = atoi(optarg);
3226
3242
      break;
3227
 
#endif      
 
3243
#endif
3228
3244
    case OPT_SOCKET:
3229
3245
      mysql_unix_port= optarg;
3230
3246
      break;
3294
3310
      break;
3295
3311
      // needs to be handled (as no-op) in non-debugging mode for test suite
3296
3312
    case (int)OPT_DISCONNECT_SLAVE_EVENT_COUNT:
3297
 
#ifndef DBUG_OFF      
 
3313
#ifndef DBUG_OFF
3298
3314
      disconnect_slave_event_count = atoi(optarg);
3299
 
#endif      
 
3315
#endif
3300
3316
      break;
3301
3317
    case (int)OPT_ABORT_SLAVE_EVENT_COUNT:
3302
 
#ifndef DBUG_OFF      
 
3318
#ifndef DBUG_OFF
3303
3319
      abort_slave_event_count = atoi(optarg);
3304
 
#endif      
 
3320
#endif
3305
3321
      break;
3306
3322
    case (int) OPT_LOG_SLAVE_UPDATES:
3307
3323
      opt_log_slave_updates = 1;
3642
3658
#endif
3643
3659
      break;
3644
3660
    case OPT_INNOBASE_SKIP:
3645
 
#ifdef HAVE_INNOBASE_DB
 
3661
#ifdef HAVE_INNOBASE_DB 
3646
3662
      innobase_skip=1;
3647
3663
      have_innobase=SHOW_OPTION_DISABLED;
3648
3664
#endif
3649
 
      break;
 
3665
    break;
3650
3666
    case OPT_INNOBASE_DATA_FILE_PATH:
3651
3667
#ifdef HAVE_INNOBASE_DB
3652
3668
      innobase_data_file_path=optarg;
3669
3685
      innobase_flush_log_at_trx_commit= optarg ? test(atoi(optarg)) : 1;
3670
3686
      break;
3671
3687
#endif /* HAVE_INNOBASE_DB */
 
3688
    case OPT_DO_PSTACK:
 
3689
      opt_do_pstack = 1;
 
3690
      break;
3672
3691
    case OPT_MYISAM_RECOVER:
3673
3692
    {
3674
3693
      if (!optarg || !optarg[0])