~ubuntu-branches/ubuntu/precise/nss/precise-security

« back to all changes in this revision

Viewing changes to mozilla/security/nss/lib/util/nssilckt.h

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2013-11-14 14:58:07 UTC
  • mfrom: (1.1.19)
  • Revision ID: package-import@ubuntu.com-20131114145807-ay302kimn72ovt88
Tags: 3.15.3-0ubuntu0.12.04.1
* SECURITY UPDATE: New upstream release to fix multiple security issues
  and add TLSv1.2 support.
  - CVE-2013-1739
  - CVE-2013-1741
  - CVE-2013-5605
  - CVE-2013-5606
* Adjusted packaging for 3.15.3:
  - debian/patches/*: refreshed.
  - debian/patches/lower-dhe-priority.patch: removed, no longer needed,
    was a workaround for an old version of firefox.
  - debian/libnss3.symbols: added new symbols.
  - debian/rules: updated for new source layout.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* This Source Code Form is subject to the terms of the Mozilla Public
2
 
 * License, v. 2.0. If a copy of the MPL was not distributed with this
3
 
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
 
 
5
 
/*
6
 
** nssilock.h - Instrumented locking functions for NSS
7
 
**
8
 
** Description:
9
 
**    nssilock provides instrumentation for locks and monitors in
10
 
**    the NSS libraries. The instrumentation, when enabled, causes
11
 
**    each call to the instrumented function to record data about
12
 
**    the call to an external file. The external file
13
 
**    subsequently used to extract performance data and other
14
 
**    statistical information about the operation of locks used in
15
 
**    the nss library.
16
 
**     
17
 
**    To enable compilation with instrumentation, build NSS with 
18
 
**    the compile time switch NEED_NSS_ILOCK defined.
19
 
**
20
 
**    say:  "gmake OS_CFLAGS+=-DNEED_NSS_ILOCK" at make time.
21
 
**
22
 
**    At runtime, to enable recording from nssilock, one or more
23
 
**    environment variables must be set. For each nssILockType to
24
 
**    be recorded, an environment variable of the form NSS_ILOCK_x
25
 
**    must be set to 1. For example:
26
 
**
27
 
**       set NSS_ILOCK_Cert=1
28
 
**
29
 
**    nssilock uses PRLOG is used to record to trace data. The
30
 
**    PRLogModule name associated with nssilock data is: "nssilock".
31
 
**    To enable recording of nssilock data you will need to set the
32
 
**    environment variable NSPR_LOG_MODULES to enable
33
 
**    recording for the nssilock log module. Similarly, you will
34
 
**    need to set the environment variable NSPR_LOG_FILE to specify
35
 
**    the filename to receive the recorded data. See prlog.h for usage.
36
 
**    Example:
37
 
**
38
 
**        export NSPR_LOG_MODULES=nssilock:6
39
 
**        export NSPR_LOG_FILE=xxxLogfile
40
 
**
41
 
** Operation:
42
 
**    nssilock wraps calls to NSPR's PZLock and PZMonitor functions
43
 
**    with similarly named functions: PZ_NewLock(), etc. When NSS is
44
 
**    built with lock instrumentation enabled, the PZ* functions are
45
 
**    compiled into NSS; when lock instrumentation is disabled,
46
 
**    calls to PZ* functions are directly mapped to PR* functions
47
 
**    and the instrumentation arguments to the PZ* functions are
48
 
**    compiled away.
49
 
**
50
 
**
51
 
** File Format:
52
 
**    The format of the external file is implementation
53
 
**    dependent. Where NSPR's PR_LOG() function is used, the file
54
 
**    contains data defined for PR_LOG() plus the data written by
55
 
**    the wrapped function. On some platforms and under some
56
 
**    circumstances, platform dependent logging or
57
 
**    instrumentation probes may be used. In any case, the
58
 
**    relevant data provided by the lock instrumentation is:
59
 
**    
60
 
**      lockType, func, address, duration, line, file [heldTime]
61
 
** 
62
 
**    where:
63
 
**    
64
 
**       lockType: a character representation of nssILockType for the
65
 
**       call. e.g. ... "cert"
66
 
**    
67
 
**       func: the function doing the tracing. e.g. "NewLock"
68
 
**    
69
 
**       address: address of the instrumented lock or monitor
70
 
**    
71
 
**       duration: is how long was spent in the instrumented function,
72
 
**       in PRIntervalTime "ticks".
73
 
**    
74
 
**       line: the line number within the calling function
75
 
**    
76
 
**       file: the file from which the call was made
77
 
**    
78
 
**       heldTime: how long the lock/monitor was held. field
79
 
**       present only for PZ_Unlock() and PZ_ExitMonitor().
80
 
**    
81
 
** Design Notes:
82
 
**    The design for lock instrumentation was influenced by the
83
 
**    need to gather performance data on NSS 3.x. It is intended
84
 
**    that the effort to modify NSS to use lock instrumentation
85
 
**    be minimized. Existing calls to locking functions need only
86
 
**    have their names changed to the instrumentation function
87
 
**    names.
88
 
**    
89
 
** Private NSS Interface:
90
 
**    nssilock.h defines a private interface for use by NSS.
91
 
**    nssilock.h is experimental in nature and is subject to
92
 
**    change or revocation without notice. ... Don't mess with
93
 
**    it.
94
 
**    
95
 
*/
96
 
 
97
 
/*
98
 
 * $Id:
99
 
 */
100
 
 
101
 
#ifndef _NSSILCKT_H_
102
 
#define _NSSILCKT_H_
103
 
 
104
 
#include "utilrename.h"
105
 
#include "prtypes.h"
106
 
#include "prmon.h"
107
 
#include "prlock.h"
108
 
#include "prcvar.h"
109
 
 
110
 
typedef enum {
111
 
    nssILockArena = 0,
112
 
    nssILockSession = 1,
113
 
    nssILockObject = 2,
114
 
    nssILockRefLock = 3,
115
 
    nssILockCert = 4,
116
 
    nssILockCertDB = 5,
117
 
    nssILockDBM = 6,
118
 
    nssILockCache = 7,
119
 
    nssILockSSL = 8,
120
 
    nssILockList = 9,
121
 
    nssILockSlot = 10,
122
 
    nssILockFreelist = 11,
123
 
    nssILockOID = 12,
124
 
    nssILockAttribute = 13,
125
 
    nssILockPK11cxt = 14,  /* pk11context */
126
 
    nssILockRWLock = 15,
127
 
    nssILockOther = 16,
128
 
    nssILockSelfServ = 17,
129
 
    nssILockKeyDB = 18,
130
 
    nssILockLast  /* don't use this one! */
131
 
} nssILockType;
132
 
 
133
 
/*
134
 
** conditionally compile in nssilock features
135
 
*/
136
 
#if defined(NEED_NSS_ILOCK)
137
 
 
138
 
/*
139
 
** Declare operation type enumerator
140
 
** enumerations identify the function being performed
141
 
*/
142
 
typedef enum  {
143
 
    FlushTT = 0,
144
 
    NewLock = 1,
145
 
    Lock = 2,
146
 
    Unlock = 3,
147
 
    DestroyLock = 4,
148
 
    NewCondVar = 5,
149
 
    WaitCondVar = 6,
150
 
    NotifyCondVar = 7,
151
 
    NotifyAllCondVar = 8,
152
 
    DestroyCondVar = 9,
153
 
    NewMonitor = 10,
154
 
    EnterMonitor = 11,
155
 
    ExitMonitor = 12,
156
 
    Notify = 13,
157
 
    NotifyAll = 14,
158
 
    Wait = 15,
159
 
    DestroyMonitor = 16
160
 
} nssILockOp;
161
 
 
162
 
/*
163
 
** Declare the trace record
164
 
*/
165
 
struct pzTrace_s {
166
 
    PRUint32        threadID; /* PR_GetThreadID() */
167
 
    nssILockOp      op;       /* operation being performed */
168
 
    nssILockType    ltype;    /* lock type identifier */
169
 
    PRIntervalTime  callTime; /* time spent in function */
170
 
    PRIntervalTime  heldTime; /* lock held time, or -1 */
171
 
    void            *lock;    /* address of lock structure */    
172
 
    PRIntn          line;     /* line number */
173
 
    char            file[24]; /* filename */
174
 
};
175
 
 
176
 
/*
177
 
** declare opaque types. See: nssilock.c
178
 
*/
179
 
typedef struct pzlock_s PZLock;
180
 
typedef struct pzcondvar_s PZCondVar;
181
 
typedef struct pzmonitor_s PZMonitor;
182
 
 
183
 
#else /* NEED_NSS_ILOCK */
184
 
 
185
 
#define PZLock                  PRLock
186
 
#define PZCondVar               PRCondVar
187
 
#define PZMonitor               PRMonitor
188
 
    
189
 
#endif /* NEED_NSS_ILOCK */
190
 
 
191
 
#endif /* _NSSILCKT_H_ */