annotate src/core/ngx_md5.h @ 4309:3f6040cd731e

Added shmtx interface to forcibly unlock mutexes. It is currently used from master process on abnormal worker termination to unlock accept mutex (unlocking of accept mutex was broken in 1.0.2). It is expected to be used in the future to unlock other mutexes as well. Shared mutex code was rewritten to make this possible in a safe way, i.e. with a check if lock was actually held by the exited process. We again use pid to lock mutex, and use separate atomic variable for a count of processes waiting in sem_wait().
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 23 Nov 2011 13:55:38 +0000
parents 38e6f45c5e3d
children d620f497c50f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1572
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 */
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #ifndef _NGX_MD5_H_INCLUDED_
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #define _NGX_MD5_H_INCLUDED_
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 #include <ngx_config.h>
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #include <ngx_core.h>
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14
3895
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
15 #if (NGX_HAVE_MD5)
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
16
1572
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 #if (NGX_HAVE_OPENSSL_MD5_H)
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 #include <openssl/md5.h>
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 #else
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 #include <md5.h>
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 #endif
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 typedef MD5_CTX ngx_md5_t;
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 #if (NGX_OPENSSL_MD5)
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28
1598
27d4ed42e49d style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1572
diff changeset
29 #define ngx_md5_init MD5_Init
27d4ed42e49d style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1572
diff changeset
30 #define ngx_md5_update MD5_Update
27d4ed42e49d style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1572
diff changeset
31 #define ngx_md5_final MD5_Final
1572
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 #else
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34
1598
27d4ed42e49d style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1572
diff changeset
35 #define ngx_md5_init MD5Init
27d4ed42e49d style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1572
diff changeset
36 #define ngx_md5_update MD5Update
27d4ed42e49d style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1572
diff changeset
37 #define ngx_md5_final MD5Final
1572
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 #endif
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41
3895
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
42 #else /* !NGX_HAVE_MD5 */
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
43
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
44
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
45 typedef struct {
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
46 uint64_t bytes;
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
47 uint32_t a, b, c, d;
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
48 u_char buffer[64];
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
49 } ngx_md5_t;
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
50
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
51
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
52 void ngx_md5_init(ngx_md5_t *ctx);
3927
38e6f45c5e3d make built-in ngx_md5_update() interface consistent with other implemenations
Igor Sysoev <igor@sysoev.ru>
parents: 3895
diff changeset
53 void ngx_md5_update(ngx_md5_t *ctx, const void *data, size_t size);
3895
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
54 void ngx_md5_final(u_char result[16], ngx_md5_t *ctx);
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
55
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
56
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
57 #endif
b659514a3948 an internal MD5 implemenation
Igor Sysoev <igor@sysoev.ru>
parents: 1598
diff changeset
58
1572
a3c0b8dadc16 ngx_md5.h
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59 #endif /* _NGX_MD5_H_INCLUDED_ */