~ubuntu-branches/ubuntu/natty/mysql-5.1/natty-proposed

« back to all changes in this revision

Viewing changes to storage/innobase/sync/sync0arr.c

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2012-02-22 08:30:45 UTC
  • mfrom: (1.4.1)
  • Revision ID: package-import@ubuntu.com-20120222083045-2rd53r4bnyx7qus4
Tags: 5.1.61-0ubuntu0.11.04.1
* SECURITY UPDATE: Update to 5.1.61 to fix multiple security issues
  (LP: #937869)
  - http://www.oracle.com/technetwork/topics/security/cpujan2012-366304.html
  - CVE-2011-2262
  - CVE-2012-0075
  - CVE-2012-0112
  - CVE-2012-0113
  - CVE-2012-0114
  - CVE-2012-0115
  - CVE-2012-0116
  - CVE-2012-0117
  - CVE-2012-0118
  - CVE-2012-0119
  - CVE-2012-0120
  - CVE-2012-0484
  - CVE-2012-0485
  - CVE-2012-0486
  - CVE-2012-0487
  - CVE-2012-0488
  - CVE-2012-0489
  - CVE-2012-0490
  - CVE-2012-0491
  - CVE-2012-0492
  - CVE-2012-0493
  - CVE-2012-0494
  - CVE-2012-0495
  - CVE-2012-0496

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/******************************************************
2
2
The wait array used in synchronization primitives
3
3
 
4
 
(c) 1995 Innobase Oy
 
4
Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved.
5
5
 
6
6
Created 9/5/1995 Heikki Tuuri
7
7
*******************************************************/
709
709
                                        fprintf(stderr, "rw-lock %p ",
710
710
                                                (void*) lock);
711
711
                                        sync_array_cell_print(stderr, cell);
712
 
                                        rw_lock_debug_print(debug);
 
712
                                        rw_lock_debug_print(stderr, debug);
713
713
                                        return(TRUE);
714
714
                                }
715
715
                        }
916
916
Prints warnings of long semaphore waits to stderr. */
917
917
 
918
918
ibool
919
 
sync_array_print_long_waits(void)
920
 
/*=============================*/
921
 
                        /* out: TRUE if fatal semaphore wait threshold
922
 
                        was exceeded */
 
919
sync_array_print_long_waits(
 
920
/*========================*/
 
921
                                /* out: TRUE if fatal semaphore wait threshold
 
922
                                was exceeded */
 
923
        os_thread_id_t* waiter, /* out: longest waiting thread */
 
924
        const void**    sema)   /* out: longest-waited-for semaphore */
923
925
{
924
926
        sync_cell_t*    cell;
925
927
        ibool           old_val;
927
929
        ulint           i;
928
930
        ulint           fatal_timeout = srv_fatal_semaphore_wait_threshold;
929
931
        ibool           fatal = FALSE;
 
932
        double          longest_diff = 0;
930
933
 
931
934
        for (i = 0; i < sync_primary_wait_array->n_cells; i++) {
932
935
 
 
936
                double  diff;
 
937
                void*   wait_object;
 
938
 
933
939
                cell = sync_array_get_nth_cell(sync_primary_wait_array, i);
934
940
 
935
 
                if (cell->wait_object != NULL && cell->waiting
936
 
                    && difftime(time(NULL), cell->reservation_time) > 240) {
 
941
                wait_object = cell->wait_object;
 
942
 
 
943
                if (wait_object == NULL || !cell->waiting) {
 
944
 
 
945
                        continue;
 
946
                }
 
947
 
 
948
                diff = difftime(time(NULL), cell->reservation_time);
 
949
 
 
950
                if (diff > 240) {
937
951
                        fputs("InnoDB: Warning: a long semaphore wait:\n",
938
952
                              stderr);
939
953
                        sync_array_cell_print(stderr, cell);
940
954
                        noticed = TRUE;
941
955
                }
942
956
 
943
 
                if (cell->wait_object != NULL && cell->waiting
944
 
                    && difftime(time(NULL), cell->reservation_time)
945
 
                    > fatal_timeout) {
 
957
                if (diff > fatal_timeout) {
946
958
                        fatal = TRUE;
947
959
                }
 
960
 
 
961
                if (diff > longest_diff) {
 
962
                        longest_diff = diff;
 
963
                        *sema = wait_object;
 
964
                        *waiter = cell->thread;
 
965
                }
948
966
        }
949
967
 
950
968
        if (noticed) {