~ubuntu-branches/ubuntu/saucy/db/saucy-proposed

« back to all changes in this revision

Viewing changes to sql/sqlite/src/fault.c

  • Committer: Bazaar Package Importer
  • Author(s): Colin Watson
  • Date: 2010-11-05 15:02:09 UTC
  • mfrom: (13.1.12 sid)
  • Revision ID: james.westby@ubuntu.com-20101105150209-ppvyn0619pu014xo
Tags: 5.1.19-1ubuntu1
* Resynchronise with Debian.  Remaining changes:
  - Pass --build/--host to configure to support cross-building, and don't
    override CC.
  - Disable the Java build when cross-building, for now.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
** 2008 Jan 22
3
 
**
4
 
** The author disclaims copyright to this source code.  In place of
5
 
** a legal notice, here is a blessing:
6
 
**
7
 
**    May you do good and not evil.
8
 
**    May you find forgiveness for yourself and forgive others.
9
 
**    May you share freely, never taking more than you give.
10
 
**
11
 
*************************************************************************
12
 
**
13
 
** This file contains code to support the concept of "benign" 
14
 
** malloc failures (when the xMalloc() or xRealloc() method of the
15
 
** sqlite3_mem_methods structure fails to allocate a block of memory
16
 
** and returns 0). 
17
 
**
18
 
** Most malloc failures are non-benign. After they occur, SQLite
19
 
** abandons the current operation and returns an error code (usually
20
 
** SQLITE_NOMEM) to the user. However, sometimes a fault is not necessarily
21
 
** fatal. For example, if a malloc fails while resizing a hash table, this 
22
 
** is completely recoverable simply by not carrying out the resize. The 
23
 
** hash table will continue to function normally.  So a malloc failure 
24
 
** during a hash table resize is a benign fault.
25
 
*/
26
 
 
27
 
#include "sqliteInt.h"
28
 
 
29
 
#ifndef SQLITE_OMIT_BUILTIN_TEST
30
 
 
31
 
/*
32
 
** Global variables.
33
 
*/
34
 
typedef struct BenignMallocHooks BenignMallocHooks;
35
 
static SQLITE_WSD struct BenignMallocHooks {
36
 
  void (*xBenignBegin)(void);
37
 
  void (*xBenignEnd)(void);
38
 
} sqlite3Hooks = { 0, 0 };
39
 
 
40
 
/* The "wsdHooks" macro will resolve to the appropriate BenignMallocHooks
41
 
** structure.  If writable static data is unsupported on the target,
42
 
** we have to locate the state vector at run-time.  In the more common
43
 
** case where writable static data is supported, wsdHooks can refer directly
44
 
** to the "sqlite3Hooks" state vector declared above.
45
 
*/
46
 
#ifdef SQLITE_OMIT_WSD
47
 
# define wsdHooksInit \
48
 
  BenignMallocHooks *x = &GLOBAL(BenignMallocHooks,sqlite3Hooks)
49
 
# define wsdHooks x[0]
50
 
#else
51
 
# define wsdHooksInit
52
 
# define wsdHooks sqlite3Hooks
53
 
#endif
54
 
 
55
 
 
56
 
/*
57
 
** Register hooks to call when sqlite3BeginBenignMalloc() and
58
 
** sqlite3EndBenignMalloc() are called, respectively.
59
 
*/
60
 
void sqlite3BenignMallocHooks(
61
 
  void (*xBenignBegin)(void),
62
 
  void (*xBenignEnd)(void)
63
 
){
64
 
  wsdHooksInit;
65
 
  wsdHooks.xBenignBegin = xBenignBegin;
66
 
  wsdHooks.xBenignEnd = xBenignEnd;
67
 
}
68
 
 
69
 
/*
70
 
** This (sqlite3EndBenignMalloc()) is called by SQLite code to indicate that
71
 
** subsequent malloc failures are benign. A call to sqlite3EndBenignMalloc()
72
 
** indicates that subsequent malloc failures are non-benign.
73
 
*/
74
 
void sqlite3BeginBenignMalloc(void){
75
 
  wsdHooksInit;
76
 
  if( wsdHooks.xBenignBegin ){
77
 
    wsdHooks.xBenignBegin();
78
 
  }
79
 
}
80
 
void sqlite3EndBenignMalloc(void){
81
 
  wsdHooksInit;
82
 
  if( wsdHooks.xBenignEnd ){
83
 
    wsdHooks.xBenignEnd();
84
 
  }
85
 
}
86
 
 
87
 
#endif   /* #ifndef SQLITE_OMIT_BUILTIN_TEST */