Welcome! Log In Create A New Profile

Advanced

[nginx] svn commit: r4312 - trunk/src/os/unix

Anonymous User
November 23, 2011 09:10AM
Author: mdounin
Date: 2011-11-23 14:09:19 +0000 (Wed, 23 Nov 2011)
New Revision: 4312

Log:
Unlock of shared memory zones on process crash.

If process exited abnormally while holding lock on some shared memory zone -
unlock it. It may be not safe thing to do (as crash with lock held may
result in corrupted shared memory structure, and other processes will
subsequently crash while trying to access shared data), therefore complain
loudly if unlock succeeds.


Modified:
trunk/src/os/unix/ngx_process.c

Modified: trunk/src/os/unix/ngx_process.c
===================================================================
--- trunk/src/os/unix/ngx_process.c 2011-11-23 14:07:06 UTC (rev 4311)
+++ trunk/src/os/unix/ngx_process.c 2011-11-23 14:09:19 UTC (rev 4312)
@@ -22,6 +22,7 @@
static void ngx_execute_proc(ngx_cycle_t *cycle, void *data);
static void ngx_signal_handler(int signo);
static void ngx_process_get_status(void);
+static void ngx_unlock_mutexes(ngx_pid_t pid);


int ngx_argc;
@@ -497,17 +498,6 @@
}


- if (ngx_accept_mutex_ptr) {
-
- /*
- * unlock the accept mutex if the abnormally exited process
- * held it
- */
-
- ngx_shmtx_force_unlock(&ngx_accept_mutex, pid);
- }
-
-
one = 1;
process = "unknown process";

@@ -545,10 +535,59 @@
process, pid, WEXITSTATUS(status));
ngx_processes[i].respawn = 0;
}
+
+ ngx_unlock_mutexes(pid);
}
}


+static void
+ngx_unlock_mutexes(ngx_pid_t pid)
+{
+ ngx_uint_t i;
+ ngx_shm_zone_t *shm_zone;
+ ngx_list_part_t *part;
+ ngx_slab_pool_t *sp;
+
+ /*
+ * unlock the accept mutex if the abnormally exited process
+ * held it
+ */
+
+ if (ngx_accept_mutex_ptr) {
+ ngx_shmtx_force_unlock(&ngx_accept_mutex, pid);
+ }
+
+ /*
+ * unlock shared memory mutexes if held by the abnormally exited
+ * process
+ */
+
+ part = (ngx_list_part_t *) &ngx_cycle->shared_memory.part;
+ shm_zone = part->elts;
+
+ for (i = 0; /* void */ ; i++) {
+
+ if (i >= part->nelts) {
+ if (part->next == NULL) {
+ break;
+ }
+ part = part->next;
+ shm_zone = part->elts;
+ i = 0;
+ }
+
+ sp = (ngx_slab_pool_t *) shm_zone[i].shm.addr;
+
+ if (ngx_shmtx_force_unlock(&sp->mutex, pid)) {
+ ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
+ "shared memory zone \"%V\" was locked by %P",
+ &shm_zone[i].shm.name, pid);
+ }
+ }
+}
+
+
void
ngx_debug_point(void)
{

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] svn commit: r4312 - trunk/src/os/unix

Anonymous User 1355 November 23, 2011 09:10AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 169
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready