/ Hex Artifact Content
Login

Artifact 079fa6fe9da18ceb89e79012c010594c6672addb:


0000: 2f 2a 0a 2a 2a 20 32 30 30 37 20 41 75 67 75 73  /*.** 2007 Augus
0010: 74 20 32 38 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  t 28.**.** The a
0020: 75 74 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20  uthor disclaims 
0030: 63 6f 70 79 72 69 67 68 74 20 74 6f 20 74 68 69  copyright to thi
0040: 73 20 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20  s source code.  
0050: 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61  In place of.** a
0060: 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68   legal notice, h
0070: 65 72 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e  ere is a blessin
0080: 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20  g:.**.**    May 
0090: 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20  you do good and 
00a0: 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20  not evil..**    
00b0: 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72  May you find for
00c0: 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75  giveness for you
00d0: 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76  rself and forgiv
00e0: 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20  e others..**    
00f0: 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66 72  May you share fr
0100: 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69  eely, never taki
0110: 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75  ng more than you
0120: 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a   give..**.******
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  ***.**.** This f
0180: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ile contains the
0190: 20 63 6f 6d 6d 6f 6e 20 68 65 61 64 65 72 20 66   common header f
01a0: 6f 72 20 61 6c 6c 20 6d 75 74 65 78 20 69 6d 70  or all mutex imp
01b0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 2e 0a 2a 2a  lementations..**
01c0: 20 54 68 65 20 73 71 6c 69 74 65 49 6e 74 2e 68   The sqliteInt.h
01d0: 20 68 65 61 64 65 72 20 23 69 6e 63 6c 75 64 65   header #include
01e0: 73 20 74 68 69 73 20 66 69 6c 65 20 73 6f 20 74  s this file so t
01f0: 68 61 74 20 69 74 20 69 73 20 61 76 61 69 6c 61  hat it is availa
0200: 62 6c 65 0a 2a 2a 20 74 6f 20 61 6c 6c 20 73 6f  ble.** to all so
0210: 75 72 63 65 20 66 69 6c 65 73 2e 20 20 57 65 20  urce files.  We 
0220: 62 72 65 61 6b 20 69 74 20 6f 75 74 20 69 6e 20  break it out in 
0230: 61 6e 20 65 66 66 6f 72 74 20 74 6f 20 6b 65 65  an effort to kee
0240: 70 20 74 68 65 20 63 6f 64 65 0a 2a 2a 20 62 65  p the code.** be
0250: 74 74 65 72 20 6f 72 67 61 6e 69 7a 65 64 2e 0a  tter organized..
0260: 2a 2a 0a 2a 2a 20 4e 4f 54 45 3a 20 20 73 6f 75  **.** NOTE:  sou
0270: 72 63 65 20 66 69 6c 65 73 20 73 68 6f 75 6c 64  rce files should
0280: 20 2a 6e 6f 74 2a 20 23 69 6e 63 6c 75 64 65 20   *not* #include 
0290: 74 68 69 73 20 68 65 61 64 65 72 20 66 69 6c 65  this header file
02a0: 20 64 69 72 65 63 74 6c 79 2e 0a 2a 2a 20 53 6f   directly..** So
02b0: 75 72 63 65 20 66 69 6c 65 73 20 73 68 6f 75 6c  urce files shoul
02c0: 64 20 23 69 6e 63 6c 75 64 65 20 74 68 65 20 73  d #include the s
02d0: 71 6c 69 74 65 49 6e 74 2e 68 20 66 69 6c 65 20  qliteInt.h file 
02e0: 61 6e 64 20 6c 65 74 20 74 68 61 74 20 66 69 6c  and let that fil
02f0: 65 0a 2a 2a 20 69 6e 63 6c 75 64 65 20 74 68 69  e.** include thi
0300: 73 20 6f 6e 65 20 69 6e 64 69 72 65 63 74 6c 79  s one indirectly
0310: 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 6d 75 74  ..**.** $Id: mut
0320: 65 78 2e 68 2c 76 20 31 2e 32 20 32 30 30 37 2f  ex.h,v 1.2 2007/
0330: 30 38 2f 33 30 20 31 34 3a 31 30 3a 33 30 20 64  08/30 14:10:30 d
0340: 72 68 20 45 78 70 20 24 0a 2a 2f 0a 0a 0a 23 69  rh Exp $.*/...#i
0350: 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45  fdef SQLITE_MUTE
0360: 58 5f 41 50 50 44 45 46 0a 2f 2a 0a 2a 2a 20 49  X_APPDEF./*.** I
0370: 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 41  f SQLITE_MUTEX_A
0380: 50 50 44 45 46 20 69 73 20 64 65 66 69 6e 65 64  PPDEF is defined
0390: 2c 20 74 68 65 6e 20 74 68 69 73 20 77 68 6f 6c  , then this whol
03a0: 65 20 6d 6f 64 75 6c 65 20 69 73 0a 2a 2a 20 6f  e module is.** o
03b0: 6d 69 74 74 65 64 20 61 6e 64 20 65 71 75 69 76  mitted and equiv
03c0: 61 6c 65 6e 74 20 66 75 6e 63 74 69 6f 6e 61 6c  alent functional
03d0: 69 74 79 20 6d 75 73 74 20 62 65 20 70 72 6f 76  ity must be prov
03e0: 69 64 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 61  ided by the.** a
03f0: 70 70 6c 69 63 61 74 69 6f 6e 20 74 68 61 74 20  pplication that 
0400: 6c 69 6e 6b 73 20 61 67 61 69 6e 73 74 20 74 68  links against th
0410: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
0420: 2e 0a 2a 2f 0a 23 65 6c 73 65 0a 2f 2a 0a 2a 2a  ..*/.#else./*.**
0430: 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 61 74   Figure out what
0440: 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
0450: 63 6f 64 65 20 74 6f 20 75 73 65 2e 20 20 54 68  code to use.  Th
0460: 65 20 63 68 6f 69 63 65 73 20 61 72 65 0a 2a 2a  e choices are.**
0470: 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4d 55 54  .**   SQLITE_MUT
0480: 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20  EX_NOOP         
0490: 46 6f 72 20 73 69 6e 67 6c 65 2d 74 68 72 65 61  For single-threa
04a0: 64 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  ded applications
04b0: 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20   that.**        
04c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04d0: 20 20 20 20 20 64 6f 20 6e 6f 74 20 64 65 73 69       do not desi
04e0: 72 65 20 65 72 72 6f 72 20 63 68 65 63 6b 69 6e  re error checkin
04f0: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 53 51 4c 49 54  g..**.**   SQLIT
0500: 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 5f 44 45 42  E_MUTEX_NOOP_DEB
0510: 55 47 20 20 20 46 6f 72 20 73 69 6e 67 6c 65 2d  UG   For single-
0520: 74 68 72 65 61 64 65 64 20 61 70 70 6c 69 63 61  threaded applica
0530: 74 69 6f 6e 73 20 77 69 74 68 0a 2a 2a 20 20 20  tions with.**   
0540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0550: 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
0560: 63 68 65 63 6b 69 6e 67 20 74 6f 20 68 65 6c 70  checking to help
0570: 20 76 65 72 69 66 79 20 74 68 61 74 20 6d 75 74   verify that mut
0580: 65 78 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  exes.**         
0590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05a0: 20 20 20 20 61 72 65 20 62 65 69 6e 67 20 75 73      are being us
05b0: 65 64 20 63 6f 72 72 65 63 74 6c 79 20 65 76 65  ed correctly eve
05c0: 6e 20 74 68 6f 75 67 68 20 74 68 65 79 0a 2a 2a  n though they.**
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65               are
05f0: 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20 55 73   not needed.  Us
0600: 65 64 20 77 68 65 6e 20 53 51 4c 49 54 45 5f 44  ed when SQLITE_D
0610: 45 42 55 47 20 69 73 0a 2a 2a 20 20 20 20 20 20  EBUG is.**      
0620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0630: 20 20 20 20 20 20 20 64 65 66 69 6e 65 64 20 6f         defined o
0640: 6e 20 73 69 6e 67 6c 65 2d 74 68 72 65 61 64 65  n single-threade
0650: 64 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20  d builds..**.** 
0660: 20 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 50    SQLITE_MUTEX_P
0670: 54 48 52 45 41 44 53 20 20 20 20 20 46 6f 72 20  THREADS     For 
0680: 6d 75 6c 74 69 2d 74 68 72 65 61 64 65 64 20 61  multi-threaded a
0690: 70 70 6c 69 63 61 74 69 6f 6e 73 20 6f 6e 20 55  pplications on U
06a0: 6e 69 78 2e 0a 2a 2a 0a 2a 2a 20 20 20 53 51 4c  nix..**.**   SQL
06b0: 49 54 45 5f 4d 55 54 45 58 5f 57 33 32 20 20 20  ITE_MUTEX_W32   
06c0: 20 20 20 20 20 20 20 46 6f 72 20 6d 75 6c 74 69         For multi
06d0: 2d 74 68 72 65 61 64 65 64 20 61 70 70 6c 69 63  -threaded applic
06e0: 61 74 69 6f 6e 73 20 6f 6e 20 57 69 6e 33 32 2e  ations on Win32.
06f0: 0a 2a 2a 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f  .**.**   SQLITE_
0700: 4d 55 54 45 58 5f 4f 53 32 20 20 20 20 20 20 20  MUTEX_OS2       
0710: 20 20 20 46 6f 72 20 6d 75 6c 74 69 2d 74 68 72     For multi-thr
0720: 65 61 64 65 64 20 61 70 70 6c 69 63 61 74 69 6f  eaded applicatio
0730: 6e 73 20 6f 6e 20 4f 53 2f 32 2e 0a 2a 2f 0a 23  ns on OS/2..*/.#
0740: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 55  define SQLITE_MU
0750: 54 45 58 5f 4e 4f 4f 50 20 31 20 20 20 2f 2a 20  TEX_NOOP 1   /* 
0760: 54 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  The default */.#
0770: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
0780: 45 5f 44 45 42 55 47 29 20 26 26 20 21 53 51 4c  E_DEBUG) && !SQL
0790: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 0a 23  ITE_THREADSAFE.#
07a0: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55   undef SQLITE_MU
07b0: 54 45 58 5f 4e 4f 4f 50 0a 23 20 64 65 66 69 6e  TEX_NOOP.# defin
07c0: 65 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e  e SQLITE_MUTEX_N
07d0: 4f 4f 50 5f 44 45 42 55 47 0a 23 65 6e 64 69 66  OOP_DEBUG.#endif
07e0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
07f0: 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 20  ITE_MUTEX_NOOP) 
0800: 26 26 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  && SQLITE_THREAD
0810: 53 41 46 45 20 26 26 20 4f 53 5f 55 4e 49 58 0a  SAFE && OS_UNIX.
0820: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
0830: 55 54 45 58 5f 4e 4f 4f 50 0a 23 20 64 65 66 69  UTEX_NOOP.# defi
0840: 6e 65 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ne SQLITE_MUTEX_
0850: 50 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a  PTHREADS.#endif.
0860: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
0870: 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 20 26  TE_MUTEX_NOOP) &
0880: 26 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  & SQLITE_THREADS
0890: 41 46 45 20 26 26 20 4f 53 5f 57 49 4e 0a 23 20  AFE && OS_WIN.# 
08a0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54  undef SQLITE_MUT
08b0: 45 58 5f 4e 4f 4f 50 0a 23 20 64 65 66 69 6e 65  EX_NOOP.# define
08c0: 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 57 33   SQLITE_MUTEX_W3
08d0: 32 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  2.#endif.#if def
08e0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
08f0: 58 5f 4e 4f 4f 50 29 20 26 26 20 53 51 4c 49 54  X_NOOP) && SQLIT
0900: 45 5f 54 48 52 45 41 44 53 41 46 45 20 26 26 20  E_THREADSAFE && 
0910: 4f 53 5f 4f 53 32 0a 23 20 75 6e 64 65 66 20 53  OS_OS2.# undef S
0920: 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50  QLITE_MUTEX_NOOP
0930: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0940: 5f 4d 55 54 45 58 5f 4f 53 32 0a 23 65 6e 64 69  _MUTEX_OS2.#endi
0950: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
0960: 5f 4d 55 54 45 58 5f 4e 4f 4f 50 0a 2f 2a 0a 2a  _MUTEX_NOOP./*.*
0970: 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20 6e  * If this is a n
0980: 6f 2d 6f 70 20 69 6d 70 6c 65 6d 65 6e 74 61 74  o-op implementat
0990: 69 6f 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 20 65  ion, implement e
09a0: 76 65 72 79 74 68 69 6e 67 20 61 73 20 6d 61 63  verything as mac
09b0: 72 6f 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ros..*/.#define 
09c0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 61 6c  sqlite3_mutex_al
09d0: 6c 6f 63 28 58 29 20 20 20 20 28 28 73 71 6c 69  loc(X)    ((sqli
09e0: 74 65 33 5f 6d 75 74 65 78 2a 29 38 29 0a 23 64  te3_mutex*)8).#d
09f0: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 5f 6d 75  efine sqlite3_mu
0a00: 74 65 78 5f 66 72 65 65 28 58 29 0a 23 64 65 66  tex_free(X).#def
0a10: 69 6e 65 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ine sqlite3_mute
0a20: 78 5f 65 6e 74 65 72 28 58 29 0a 23 64 65 66 69  x_enter(X).#defi
0a30: 6e 65 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  ne sqlite3_mutex
0a40: 5f 74 72 79 28 58 29 20 20 20 20 20 20 53 51 4c  _try(X)      SQL
0a50: 49 54 45 5f 4f 4b 0a 23 64 65 66 69 6e 65 20 73  ITE_OK.#define s
0a60: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
0a70: 76 65 28 58 29 0a 23 64 65 66 69 6e 65 20 73 71  ve(X).#define sq
0a80: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
0a90: 28 58 29 20 20 20 20 20 31 0a 23 64 65 66 69 6e  (X)     1.#defin
0aa0: 65 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  e sqlite3_mutex_
0ab0: 6e 6f 74 68 65 6c 64 28 58 29 20 20 31 0a 23 65  notheld(X)  1.#e
0ac0: 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  ndif..#endif /* 
0ad0: 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 41 50 50  SQLITE_MUTEX_APP
0ae0: 44 45 46 20 2a 2f 0a                             DEF */.