List:Commits« Previous MessageNext Message »
From:Alexey Kopytov Date:October 17 2007 3:24pm
Subject:bk commit into 5.0 tree (kaa:1.2527) BUG#31207
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of kaa. When kaa does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-10-17 19:24:19+04:00, kaa@polly.(none) +21 -0
  Fix for bug #31207: Test "join_nested" shows different strategy on IA64
  CPUs / Intel's ICC compile
  
  The bug is a combination of two problems:
  
  1. IA64/ICC MySQL binaries use glibc's qsort(), not the one in mysys.
  
  2. The order relation implemented by join_tab_cmp() is not transitive,
  i.e. it is possible to choose such a, b and c that (a < b) && (b < c)
  but (c < a). This implies that result of a sort using the relation
  implemented by join_tab_cmp() depends on the order in which
  elements are compared, i.e. the result is implementation-specific. Since
  choose_plan() uses qsort() to pre-sort the
  join tables using join_tab_cmp() as a compare function, the results of
  the sorting may vary depending on qsort() implementation.
  
  It is neither possible nor important to implement a better ordering
  algorithm in join_tab_cmp(). Therefore the only way to fix it is to
  force our own qsort() to be used by renaming it to my_qsort(), so we don't depend
  on linker to decide that.
  
  This patch also "fixes" bug #20530: qsort redefinition violates the
  standard.

  include/my_sys.h@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +4 -2
    Renamed qsort() and qsort2() to my_qsort() and my_qsort2(). Since
    previously we relied on stdlib.h to provide a declaration for qsort(), a
    separate declaration for my_qsort() is now required.

  libmysql/Makefile.shared@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +1 -1
    Added mf_qsort.c to libmysql, since my_lib.c now uses my_qsort() instead of qsort().

  myisam/ft_boolean_search.c@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +2 -2
    Replaced qsort2() with my_qsort2().

  myisam/ft_nlq_search.c@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +2 -1
    Replaced qsort2() with my_qsort2().

  myisam/myisampack.c@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +1 -1
    Replaced qsort() with my_qsort().

  myisam/sort.c@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +6 -6
    Replaced qsort2() with my_qsort2().

  mysys/mf_keycache.c@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +1 -1
    Replaced qsort() with my_qsort().

  mysys/mf_qsort.c@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +2 -2
    Renamed qsort() to my_qsort() and qsort2() to my_qsort2().

  mysys/mf_sort.c@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
    Replaced qsort2() with my_qsort2().

  mysys/my_lib.c@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +3 -3
    Replaced qsort() with my_qsort().

  mysys/queues.c@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +2 -2
    Replaced qsort2() with my_qsort2().

  sql/examples/ha_tina.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
    Replaced qsort() with my_qsort().

  sql/item_cmpfunc.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
    Replaced qsort2() with my_qsort2().

  sql/item_cmpfunc.h@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
    Replaced qsort2() with my_qsort2().

  sql/opt_range.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +4 -4
    Replaced qsort() with my_qsort().

  sql/records.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +2 -1
    Replaced qsort() with my_qsort().

  sql/sql_acl.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +10 -10
    Replaced qsort() with my_qsort().

  sql/sql_array.h@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
    Replaced qsort() with my_qsort().

  sql/sql_help.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
    Replaced qsort() with my_qsort().

  sql/sql_select.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +4 -3
    Replaced qsort() with my_qsort().

  sql/sql_table.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
    Replaced qsort() with my_qsort().

diff -Nrup a/include/my_sys.h b/include/my_sys.h
--- a/include/my_sys.h	2007-08-29 19:20:12 +04:00
+++ b/include/my_sys.h	2007-10-17 19:24:12 +04:00
@@ -709,8 +709,10 @@ extern sig_handler my_set_alarm_variable
 extern void my_string_ptr_sort(void *base,uint items,size_s size);
 extern void radixsort_for_str_ptr(uchar* base[], uint number_of_elements,
 				  size_s size_of_element,uchar *buffer[]);
-extern qsort_t qsort2(void *base_ptr, size_t total_elems, size_t size,
-		      qsort2_cmp cmp, void *cmp_argument);
+extern qsort_t my_qsort(void *base_ptr, size_t total_elems, size_t size,
+                        qsort_cmp cmp);
+extern qsort_t my_qsort2(void *base_ptr, size_t total_elems, size_t size,
+                         qsort2_cmp cmp, void *cmp_argument);
 extern qsort2_cmp get_ptr_compare(uint);
 void my_store_ptr(byte *buff, uint pack_length, my_off_t pos);
 my_off_t my_get_ptr(byte *ptr, uint pack_length);
diff -Nrup a/libmysql/Makefile.shared b/libmysql/Makefile.shared
--- a/libmysql/Makefile.shared	2006-11-27 23:12:37 +03:00
+++ b/libmysql/Makefile.shared	2007-10-17 19:24:12 +04:00
@@ -73,7 +73,7 @@ sqlobjects =		net.lo
 sql_cmn_objects =	pack.lo client.lo my_time.lo
 
 # Not needed in the minimum library
-mysysobjects2 =		my_lib.lo
+mysysobjects2 =		my_lib.lo mf_qsort.lo
 mysysobjects =		$(mysysobjects1) $(mysysobjects2)
 target_libadd =		$(mysysobjects) $(mystringsobjects) $(dbugobjects) \
  $(sql_cmn_objects) $(vio_objects) $(sqlobjects)
diff -Nrup a/myisam/ft_boolean_search.c b/myisam/ft_boolean_search.c
--- a/myisam/ft_boolean_search.c	2007-01-22 15:10:36 +03:00
+++ b/myisam/ft_boolean_search.c	2007-10-17 19:24:12 +04:00
@@ -430,8 +430,8 @@ FT_INFO * ft_init_boolean_search(MI_INFO
   ftb->list=(FTB_WORD **)alloc_root(&ftb->mem_root,
                                      sizeof(FTB_WORD *)*ftb->queue.elements);
   memcpy(ftb->list, ftb->queue.root+1, sizeof(FTB_WORD *)*ftb->queue.elements);
-  qsort2(ftb->list, ftb->queue.elements, sizeof(FTB_WORD *),
-                              (qsort2_cmp)FTB_WORD_cmp_list, ftb->charset);
+  my_qsort2(ftb->list, ftb->queue.elements, sizeof(FTB_WORD *),
+            (qsort2_cmp)FTB_WORD_cmp_list, ftb->charset);
   if (ftb->queue.elements<2) ftb->with_scan &= ~FTB_FLAG_TRUNC;
   ftb->state=READY;
   return ftb;
diff -Nrup a/myisam/ft_nlq_search.c b/myisam/ft_nlq_search.c
--- a/myisam/ft_nlq_search.c	2006-12-30 23:02:04 +03:00
+++ b/myisam/ft_nlq_search.c	2007-10-17 19:24:12 +04:00
@@ -281,7 +281,8 @@ FT_INFO *ft_init_nlq_search(MI_INFO *inf
 	    &dptr, left_root_right);
 
   if (flags & FT_SORTED)
-    qsort2(dlist->doc, dlist->ndocs, sizeof(FT_DOC), (qsort2_cmp)&FT_DOC_cmp, 0);
+    my_qsort2(dlist->doc, dlist->ndocs, sizeof(FT_DOC), (qsort2_cmp)&FT_DOC_cmp,
+              0);
 
 err:
   delete_tree(&aio.dtree);
diff -Nrup a/myisam/myisampack.c b/myisam/myisampack.c
--- a/myisam/myisampack.c	2007-01-22 15:10:36 +03:00
+++ b/myisam/myisampack.c	2007-10-17 19:24:12 +04:00
@@ -3148,7 +3148,7 @@ static void fakebigcodes(HUFF_COUNTS *hu
     cur_sort_p= sort_counts;
     while (cur_count_p < end_count_p)
       *(cur_sort_p++)= cur_count_p++;
-    (void) qsort(sort_counts, 256, sizeof(my_off_t*), (qsort_cmp) fakecmp);
+    (void) my_qsort(sort_counts, 256, sizeof(my_off_t*), (qsort_cmp) fakecmp);
 
     /*
       Assign faked counts.
diff -Nrup a/myisam/sort.c b/myisam/sort.c
--- a/myisam/sort.c	2007-06-21 20:52:16 +04:00
+++ b/myisam/sort.c	2007-10-17 19:24:12 +04:00
@@ -649,8 +649,8 @@ static int NEAR_F write_keys(MI_SORT_PAR
   uint sort_length=info->key_length;
   DBUG_ENTER("write_keys");
 
-  qsort2((byte*) sort_keys,count,sizeof(byte*),(qsort2_cmp) info->key_cmp,
-         info);
+  my_qsort2((byte*) sort_keys,count,sizeof(byte*),(qsort2_cmp) info->key_cmp,
+            info);
   if (!my_b_inited(tempfile) &&
       open_cached_file(tempfile, my_tmpdir(info->tmpdir), "ST",
                        DISK_BUFFER_SIZE, info->sort_info->param->myf_rw))
@@ -692,8 +692,8 @@ static int NEAR_F write_keys_varlen(MI_S
   int err;
   DBUG_ENTER("write_keys_varlen");
 
-  qsort2((byte*) sort_keys,count,sizeof(byte*),(qsort2_cmp) info->key_cmp,
-         info);
+  my_qsort2((byte*) sort_keys,count,sizeof(byte*),(qsort2_cmp) info->key_cmp,
+            info);
   if (!my_b_inited(tempfile) &&
       open_cached_file(tempfile, my_tmpdir(info->tmpdir), "ST",
                        DISK_BUFFER_SIZE, info->sort_info->param->myf_rw))
@@ -735,8 +735,8 @@ static int NEAR_F write_index(MI_SORT_PA
 {
   DBUG_ENTER("write_index");
 
-  qsort2((gptr) sort_keys,(size_t) count,sizeof(byte*),
-        (qsort2_cmp) info->key_cmp,info);
+  my_qsort2((gptr) sort_keys,(size_t) count,sizeof(byte*),
+            (qsort2_cmp) info->key_cmp,info);
   while (count--)
   {
     if ((*info->key_write)(info,*sort_keys++))
diff -Nrup a/mysys/mf_keycache.c b/mysys/mf_keycache.c
--- a/mysys/mf_keycache.c	2007-08-29 20:45:00 +04:00
+++ b/mysys/mf_keycache.c	2007-10-17 19:24:12 +04:00
@@ -2268,7 +2268,7 @@ static int flush_cached_blocks(KEY_CACHE
      As all blocks referred in 'cache' are marked by BLOCK_IN_FLUSH
      we are guarunteed no thread will change them
   */
-  qsort((byte*) cache, count, sizeof(*cache), (qsort_cmp) cmp_sec_link);
+  my_qsort((byte*) cache, count, sizeof(*cache), (qsort_cmp) cmp_sec_link);
 
   keycache_pthread_mutex_lock(&keycache->cache_lock);
   for ( ; cache != end ; cache++)
diff -Nrup a/mysys/mf_qsort.c b/mysys/mf_qsort.c
--- a/mysys/mf_qsort.c	2006-12-23 22:04:07 +03:00
+++ b/mysys/mf_qsort.c	2007-10-17 19:24:13 +04:00
@@ -91,10 +91,10 @@ typedef struct st_stack
 *****************************************************************************/
 
 #ifdef QSORT_EXTRA_CMP_ARGUMENT
-qsort_t qsort2(void *base_ptr, size_t count, size_t size, qsort2_cmp cmp,
+qsort_t my_qsort2(void *base_ptr, size_t count, size_t size, qsort2_cmp cmp,
 	       void *cmp_argument)
 #else
-qsort_t qsort(void *base_ptr, size_t count, size_t size, qsort_cmp cmp)
+qsort_t my_qsort(void *base_ptr, size_t count, size_t size, qsort_cmp cmp)
 #endif
 {
   char *low, *high, *pivot;
diff -Nrup a/mysys/mf_sort.c b/mysys/mf_sort.c
--- a/mysys/mf_sort.c	2006-12-23 22:04:07 +03:00
+++ b/mysys/mf_sort.c	2007-10-17 19:24:13 +04:00
@@ -35,7 +35,7 @@ void my_string_ptr_sort(void *base, uint
     if (size && items)
     {
       uint size_arg=size;
-      qsort2(base,items,sizeof(byte*),get_ptr_compare(size),(void*) &size_arg);
+      my_qsort2(base,items,sizeof(byte*),get_ptr_compare(size),(void*) &size_arg);
     }
   }
 }
diff -Nrup a/mysys/my_lib.c b/mysys/my_lib.c
--- a/mysys/my_lib.c	2007-03-28 21:46:36 +04:00
+++ b/mysys/my_lib.c	2007-10-17 19:24:13 +04:00
@@ -187,7 +187,7 @@ MY_DIR	*my_dir(const char *path, myf MyF
   result->number_off_files= dir_entries_storage->elements;
   
   if (!(MyFlags & MY_DONT_SORT))
-    qsort((void *) result->dir_entry, result->number_off_files,
+    my_qsort((void *) result->dir_entry, result->number_off_files,
           sizeof(FILEINFO), (qsort_cmp) comp_names);
   DBUG_RETURN(result);
 
@@ -498,7 +498,7 @@ MY_DIR	*my_dir(const char *path, myf MyF
   result->number_off_files= dir_entries_storage->elements;
 
   if (!(MyFlags & MY_DONT_SORT))
-    qsort((void *) result->dir_entry, result->number_off_files,
+    my_qsort((void *) result->dir_entry, result->number_off_files,
           sizeof(FILEINFO), (qsort_cmp) comp_names);
   DBUG_PRINT("exit", ("found %d files", result->number_off_files));
   DBUG_RETURN(result);
@@ -605,7 +605,7 @@ MY_DIR	*my_dir(const char* path, myf MyF
   result->number_off_files= dir_entries_storage->elements;
   
   if (!(MyFlags & MY_DONT_SORT))
-    qsort((void *) result->dir_entry, result->number_off_files,
+    my_qsort((void *) result->dir_entry, result->number_off_files,
           sizeof(FILEINFO), (qsort_cmp) comp_names);
   DBUG_RETURN(result);
 
diff -Nrup a/mysys/queues.c b/mysys/queues.c
--- a/mysys/queues.c	2006-12-23 22:04:08 +03:00
+++ b/mysys/queues.c	2007-10-17 19:24:13 +04:00
@@ -250,6 +250,6 @@ static int queue_fix_cmp(QUEUE *queue, v
 
 void queue_fix(QUEUE *queue)
 {
-  qsort2(queue->root+1,queue->elements, sizeof(void *),
-	 (qsort2_cmp)queue_fix_cmp, queue);
+  my_qsort2(queue->root+1,queue->elements, sizeof(void *),
+            (qsort2_cmp)queue_fix_cmp, queue);
 }
diff -Nrup a/sql/examples/ha_tina.cc b/sql/examples/ha_tina.cc
--- a/sql/examples/ha_tina.cc	2007-06-15 10:19:34 +04:00
+++ b/sql/examples/ha_tina.cc	2007-10-17 19:24:13 +04:00
@@ -852,7 +852,7 @@ int ha_tina::rnd_end()
       It also sorts so that we move the final blocks to the
       beginning so that we move the smallest amount of data possible.
     */
-    qsort(chain, (size_t)(chain_ptr - chain), sizeof(tina_set), (qsort_cmp)sort_set);
+    my_qsort(chain, (size_t)(chain_ptr - chain), sizeof(tina_set), (qsort_cmp)sort_set);
     for (ptr= chain; ptr < chain_ptr; ptr++)
     {
       memmove(share->mapped_file + ptr->begin, share->mapped_file + ptr->end,
diff -Nrup a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
--- a/sql/item_cmpfunc.cc	2007-07-16 01:03:32 +04:00
+++ b/sql/item_cmpfunc.cc	2007-10-17 19:24:13 +04:00
@@ -2775,7 +2775,7 @@ static inline int cmp_ulongs (ulonglong 
 
   SYNOPSIS
     cmp_longlong()
-      cmp_arg   an argument passed to the calling function (qsort2)
+      cmp_arg   an argument passed to the calling function (my_qsort2)
       a         left argument
       b         right argument
 
diff -Nrup a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h
--- a/sql/item_cmpfunc.h	2007-08-31 03:23:36 +04:00
+++ b/sql/item_cmpfunc.h	2007-10-17 19:24:13 +04:00
@@ -781,7 +781,7 @@ public:
   virtual byte *get_value(Item *item)=0;
   void sort()
   {
-    qsort2(base,used_count,size,compare,collation);
+    my_qsort2(base,used_count,size,compare,collation);
   }
   int find(Item *item);
   
diff -Nrup a/sql/opt_range.cc b/sql/opt_range.cc
--- a/sql/opt_range.cc	2007-09-12 18:13:15 +04:00
+++ b/sql/opt_range.cc	2007-10-17 19:24:13 +04:00
@@ -3159,8 +3159,8 @@ TRP_ROR_INTERSECT *get_best_ror_intersec
     ROR_SCAN_INFO's.
     Step 2: Get best ROR-intersection using an approximate algorithm.
   */
-  qsort(tree->ror_scans, tree->n_ror_scans, sizeof(ROR_SCAN_INFO*),
-        (qsort_cmp)cmp_ror_scan_info);
+  my_qsort(tree->ror_scans, tree->n_ror_scans, sizeof(ROR_SCAN_INFO*),
+           (qsort_cmp)cmp_ror_scan_info);
   DBUG_EXECUTE("info",print_ror_scans_arr(param->table, "ordered",
                                           tree->ror_scans,
                                           tree->ror_scans_end););
@@ -3349,8 +3349,8 @@ TRP_ROR_INTERSECT *get_best_covering_ror
         bitmap_get_first(&(*scan)->covered_fields);
     }
 
-    qsort(ror_scan_mark, ror_scans_end-ror_scan_mark, sizeof(ROR_SCAN_INFO*),
-          (qsort_cmp)cmp_ror_scan_info_covering);
+    my_qsort(ror_scan_mark, ror_scans_end-ror_scan_mark, sizeof(ROR_SCAN_INFO*),
+             (qsort_cmp)cmp_ror_scan_info_covering);
 
     DBUG_EXECUTE("info", print_ror_scans_arr(param->table,
                                              "remaining scans",
diff -Nrup a/sql/records.cc b/sql/records.cc
--- a/sql/records.cc	2006-12-30 23:02:07 +03:00
+++ b/sql/records.cc	2007-10-17 19:24:13 +04:00
@@ -497,7 +497,8 @@ static int rr_from_cache(READ_RECORD *in
       int3store(ref_position,(long) i);
       ref_position+=3;
     }
-    qsort(info->read_positions,length,info->struct_length,(qsort_cmp) rr_cmp);
+    my_qsort(info->read_positions, length, info->struct_length,
+             (qsort_cmp) rr_cmp);
 
     position=info->read_positions;
     for (i=0 ; i < length ; i++)
diff -Nrup a/sql/sql_acl.cc b/sql/sql_acl.cc
--- a/sql/sql_acl.cc	2007-06-20 16:24:27 +04:00
+++ b/sql/sql_acl.cc	2007-10-17 19:24:13 +04:00
@@ -248,8 +248,8 @@ static my_bool acl_load(THD *thd, TABLE_
 #endif
     VOID(push_dynamic(&acl_hosts,(gptr) &host));
   }
-  qsort((gptr) dynamic_element(&acl_hosts,0,ACL_HOST*),acl_hosts.elements,
-	sizeof(ACL_HOST),(qsort_cmp) acl_compare);
+  my_qsort((gptr) dynamic_element(&acl_hosts,0,ACL_HOST*),acl_hosts.elements,
+           sizeof(ACL_HOST),(qsort_cmp) acl_compare);
   end_read_record(&read_record_info);
   freeze_size(&acl_hosts);
 
@@ -421,8 +421,8 @@ static my_bool acl_load(THD *thd, TABLE_
         allow_all_hosts=1;			// Anyone can connect
     }
   }
-  qsort((gptr) dynamic_element(&acl_users,0,ACL_USER*),acl_users.elements,
-	sizeof(ACL_USER),(qsort_cmp) acl_compare);
+  my_qsort((gptr) dynamic_element(&acl_users,0,ACL_USER*),acl_users.elements,
+           sizeof(ACL_USER),(qsort_cmp) acl_compare);
   end_read_record(&read_record_info);
   freeze_size(&acl_users);
 
@@ -479,8 +479,8 @@ static my_bool acl_load(THD *thd, TABLE_
 #endif
     VOID(push_dynamic(&acl_dbs,(gptr) &db));
   }
-  qsort((gptr) dynamic_element(&acl_dbs,0,ACL_DB*),acl_dbs.elements,
-	sizeof(ACL_DB),(qsort_cmp) acl_compare);
+  my_qsort((gptr) dynamic_element(&acl_dbs,0,ACL_DB*),acl_dbs.elements,
+           sizeof(ACL_DB),(qsort_cmp) acl_compare);
   end_read_record(&read_record_info);
   freeze_size(&acl_dbs);
   init_check_host();
@@ -1110,8 +1110,8 @@ static void acl_insert_user(const char *
   if (!acl_user.host.hostname ||
       (acl_user.host.hostname[0] == wild_many && !acl_user.host.hostname[1]))
     allow_all_hosts=1;		// Anyone can connect /* purecov: tested */
-  qsort((gptr) dynamic_element(&acl_users,0,ACL_USER*),acl_users.elements,
-	sizeof(ACL_USER),(qsort_cmp) acl_compare);
+  my_qsort((gptr) dynamic_element(&acl_users,0,ACL_USER*),acl_users.elements,
+           sizeof(ACL_USER),(qsort_cmp) acl_compare);
 
   /* Rebuild 'acl_check_hosts' since 'acl_users' has been modified */
   rebuild_check_host();
@@ -1173,8 +1173,8 @@ static void acl_insert_db(const char *us
   acl_db.access=privileges;
   acl_db.sort=get_sort(3,acl_db.host.hostname,acl_db.db,acl_db.user);
   VOID(push_dynamic(&acl_dbs,(gptr) &acl_db));
-  qsort((gptr) dynamic_element(&acl_dbs,0,ACL_DB*),acl_dbs.elements,
-	sizeof(ACL_DB),(qsort_cmp) acl_compare);
+  my_qsort((gptr) dynamic_element(&acl_dbs,0,ACL_DB*),acl_dbs.elements,
+           sizeof(ACL_DB),(qsort_cmp) acl_compare);
 }
 
 
diff -Nrup a/sql/sql_array.h b/sql/sql_array.h
--- a/sql/sql_array.h	2006-12-23 22:04:26 +03:00
+++ b/sql/sql_array.h	2007-10-17 19:24:13 +04:00
@@ -62,7 +62,7 @@ public:
 
   void sort(CMP_FUNC cmp_func)
   {
-    qsort(array.buffer, array.elements, sizeof(Elem), (qsort_cmp)cmp_func);
+    my_qsort(array.buffer, array.elements, sizeof(Elem), (qsort_cmp)cmp_func);
   }
 };
 
diff -Nrup a/sql/sql_help.cc b/sql/sql_help.cc
--- a/sql/sql_help.cc	2007-02-19 15:39:27 +03:00
+++ b/sql/sql_help.cc	2007-10-17 19:24:13 +04:00
@@ -524,7 +524,7 @@ int send_variant_2_list(MEM_ROOT *mem_ro
   List_iterator<String> it(*names);
   for (pos= pointers; pos!=end; (*pos++= it++));
 
-  qsort(pointers,names->elements,sizeof(String*),string_ptr_cmp);
+  my_qsort(pointers,names->elements,sizeof(String*),string_ptr_cmp);
 
   for (pos= pointers; pos!=end; pos++)
   {
diff -Nrup a/sql/sql_select.cc b/sql/sql_select.cc
--- a/sql/sql_select.cc	2007-09-24 13:33:23 +04:00
+++ b/sql/sql_select.cc	2007-10-17 19:24:13 +04:00
@@ -3658,7 +3658,7 @@ update_ref_and_keys(THD *thd, DYNAMIC_AR
   {
     KEYUSE key_end,*prev,*save_pos,*use;
 
-    qsort(keyuse->buffer,keyuse->elements,sizeof(KEYUSE),
+    my_qsort(keyuse->buffer,keyuse->elements,sizeof(KEYUSE),
 	  (qsort_cmp) sort_keyuse);
 
     bzero((char*) &key_end,sizeof(key_end));    /* Add for easy testing */
@@ -4371,8 +4371,9 @@ choose_plan(JOIN *join, table_map join_t
       Apply heuristic: pre-sort all access plans with respect to the number of
       records accessed.
   */
-  qsort(join->best_ref + join->const_tables, join->tables - join->const_tables,
-        sizeof(JOIN_TAB*), straight_join?join_tab_cmp_straight:join_tab_cmp);
+  my_qsort(join->best_ref + join->const_tables,
+           join->tables - join->const_tables, sizeof(JOIN_TAB*),
+           straight_join ? join_tab_cmp_straight : join_tab_cmp);
   
   if (straight_join)
   {
diff -Nrup a/sql/sql_table.cc b/sql/sql_table.cc
--- a/sql/sql_table.cc	2007-08-05 07:53:13 +04:00
+++ b/sql/sql_table.cc	2007-10-17 19:24:13 +04:00
@@ -1476,7 +1476,7 @@ static int mysql_prepare_table(THD *thd,
     DBUG_RETURN(-1);
   }
   /* Sort keys in optimized order */
-  qsort((gptr) *key_info_buffer, *key_count, sizeof(KEY),
+  my_qsort((gptr) *key_info_buffer, *key_count, sizeof(KEY),
 	(qsort_cmp) sort_keys);
   create_info->null_bits= null_fields;
 
Thread
bk commit into 5.0 tree (kaa:1.2527) BUG#31207Alexey Kopytov17 Oct