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 }