Mercurial > hg > nginx
comparison src/os/win32/ngx_shmem.c @ 2904:474a9daf8c80
*) fix memory leak in successful case
*) log shared memory name in failure case
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 02 Jun 2009 13:56:42 +0000 |
parents | beb0707ed8ab |
children | d620f497c50f |
comparison
equal
deleted
inserted
replaced
2903:beb0707ed8ab | 2904:474a9daf8c80 |
---|---|
17 name = ngx_alloc(shm->name.len + 2 + sizeof(NGX_INT32_LEN), shm->log); | 17 name = ngx_alloc(shm->name.len + 2 + sizeof(NGX_INT32_LEN), shm->log); |
18 if (name == NULL) { | 18 if (name == NULL) { |
19 return NGX_ERROR; | 19 return NGX_ERROR; |
20 } | 20 } |
21 | 21 |
22 ngx_sprintf(name, "%V_%s%Z", &shm->name, ngx_unique); | 22 (void) ngx_sprintf(name, "%V_%s%Z", &shm->name, ngx_unique); |
23 | 23 |
24 ngx_set_errno(0); | 24 ngx_set_errno(0); |
25 | 25 |
26 size = shm->size; | 26 size = shm->size; |
27 | 27 |
31 (char *) name); | 31 (char *) name); |
32 | 32 |
33 if (shm->handle == NULL) { | 33 if (shm->handle == NULL) { |
34 ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno, | 34 ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno, |
35 "CreateFileMapping(%uz, %s) failed", | 35 "CreateFileMapping(%uz, %s) failed", |
36 shm->size, shm->name.data); | 36 shm->size, name); |
37 goto failed; | 37 ngx_free(name); |
38 | |
39 return NGX_ERROR; | |
38 } | 40 } |
41 | |
42 ngx_free(name); | |
39 | 43 |
40 if (ngx_errno == ERROR_ALREADY_EXISTS) { | 44 if (ngx_errno == ERROR_ALREADY_EXISTS) { |
41 shm->exists = 1; | 45 shm->exists = 1; |
42 } | 46 } |
43 | 47 |
46 if (shm->addr != NULL) { | 50 if (shm->addr != NULL) { |
47 return NGX_OK; | 51 return NGX_OK; |
48 } | 52 } |
49 | 53 |
50 ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno, | 54 ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno, |
51 "MapViewOfFile(%uz) failed", shm->size); | 55 "MapViewOfFile(%uz) of file mapping \"%V\" failed", |
56 shm->size, &shm->name); | |
52 | 57 |
53 if (CloseHandle(shm->handle) == 0) { | 58 if (CloseHandle(shm->handle) == 0) { |
54 ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno, | 59 ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno, |
55 "CloseHandle() failed"); | 60 "CloseHandle() of file mapping \"%V\" failed", |
61 &shm->name); | |
56 } | 62 } |
57 | |
58 failed: | |
59 | |
60 ngx_free(name); | |
61 | 63 |
62 return NGX_ERROR; | 64 return NGX_ERROR; |
63 } | 65 } |
64 | 66 |
65 | 67 |
66 void | 68 void |
67 ngx_shm_free(ngx_shm_t *shm) | 69 ngx_shm_free(ngx_shm_t *shm) |
68 { | 70 { |
69 if (UnmapViewOfFile(shm->addr) == 0) { | 71 if (UnmapViewOfFile(shm->addr) == 0) { |
70 ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno, | 72 ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno, |
71 "UnmapViewOfFile(%p) failed", shm->addr); | 73 "UnmapViewOfFile(%p) of file mapping \"%V\" failed", |
74 shm->addr, &shm->name); | |
72 } | 75 } |
73 | 76 |
74 if (CloseHandle(shm->handle) == 0) { | 77 if (CloseHandle(shm->handle) == 0) { |
75 ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno, | 78 ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno, |
76 "CloseHandle() failed"); | 79 "CloseHandle() of file mapping \"%V\" failed", |
80 &shm->name); | |
77 } | 81 } |
78 } | 82 } |