diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c
index 910846f..94d0c72 100644
--- a/src/core/ngx_inet.c
+++ b/src/core/ngx_inet.c
@@ -210,3 +210,58 @@
 
     return NGX_OK;
 }
+
+
+#if 0
+
+ngx_int_t ngx_inet_addr_port(ngx_conf_t *cf, ngx_command_t *cmd,
+                             ngx_str_t *addr_port)
+{
+    u_char          *host;
+    ngx_int_t        port;
+    ngx_uint_t       p;
+    struct hostent  *h;
+
+    for (p = 0; p < addr_port->len; p++) {
+        if (addr_port->data[p] == ':') {
+            break;
+        }
+    }
+
+    in_addr->host.len = p;
+    if (!(in_addr->host.data = ngx_palloc(pool, p + 1))) {
+        return NGX_ERROR;
+    }
+
+    ngx_cpystrn(in_addr->host.data, addr_port->data, p + 1);
+
+    if (p == addr_port->len) {
+        p = 0;
+    }
+
+    port = ngx_atoi(&addr[p], args[1].len - p);
+    if (port == NGX_ERROR && p == 0) {
+
+        /* default port */
+        iap->port = 0;
+
+    } else if ((port == NGX_ERROR && p != 0) /* "listen host:NONNUMBER" */
+               || (port < 1 || port > 65536)) { /* "listen 99999" */
+
+        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+                           "invalid port \"%s\" in \"%s\" directive, "
+                           "it must be a number between 1 and 65535",
+                           &addr[p], cmd->name.data);
+
+        return NGX_CONF_ERROR;
+
+    } else if (p == 0) {
+        ls->addr = INADDR_ANY;
+        ls->port = (in_port_t) port;
+        return NGX_CONF_OK;
+    }
+
+    return NGX_OK;
+}
+
+#endif
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index 6116de0..a1d6f59 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -707,11 +707,11 @@
 
 static ngx_int_t ngx_kqueue_process_changes(ngx_cycle_t *cycle, ngx_uint_t try)
 {
-    int              n;
-    ngx_int_t        rc;
-    ngx_err_t        err;
-    struct timespec  ts;
-    struct kevent   *changes;
+    int               n;
+    ngx_int_t         rc;
+    ngx_err_t         err;
+    struct timespec   ts;
+    struct kevent    *changes;
 
     if (ngx_mutex_lock(kevent_mutex) == NGX_ERROR) {
         return NGX_ERROR;
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 10f24a6..a02318d 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -95,12 +95,14 @@
             err = ngx_socket_errno;
 
             if (err == NGX_EAGAIN) {
+#if 0
                 if (!(ngx_event_flags & NGX_USE_RTSIG_EVENT))
                 {
                     ngx_log_error(NGX_LOG_NOTICE, log, err,
                                   "EAGAIN after %d accepted connection(s)",
                                   accepted);
                 }
+#endif
 
                 ngx_destroy_pool(pool);
                 return;
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index 6c4f819..f00ae65 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -1479,10 +1479,14 @@
     ngx_str_t          *args;
     ngx_http_listen_t  *ls;
 
-    /* TODO: check duplicate 'listen' directives,
-             add resolved name to server names ??? */
+    /*
+     * TODO: check duplicate 'listen' directives,
+     *       add resolved name to server names ???
+     */
 
-    ngx_test_null(ls, ngx_push_array(&scf->listen), NGX_CONF_ERROR);
+    if (!(ls = ngx_array_push(&scf->listen))) {
+        return NGX_CONF_ERROR;
+    }
 
     /* AF_INET only */
 
diff --git a/src/os/unix/ngx_atomic.h b/src/os/unix/ngx_atomic.h
index 18d5eda..552edd5 100644
--- a/src/os/unix/ngx_atomic.h
+++ b/src/os/unix/ngx_atomic.h
@@ -68,6 +68,57 @@
 }
 
 
+#elif ( __sparc__ )
+
+typedef volatile uint32_t  ngx_atomic_t;
+
+
+static ngx_inline uint32_t ngx_atomic_inc(ngx_atomic_t *value)
+{
+    uint32_t  old, new, res;
+
+    old = *value;
+
+    for ( ;; ) {
+
+        new = old + 1;
+        res = new;
+
+        __asm__ volatile (
+
+        "casa [%1]ASI_P, %2, %0"
+
+        : "+r" (res) : "r" (value), "r" (old));
+
+        if (res == old) {
+            return new;
+        }
+
+        old = res;
+    }
+}
+
+
+/* STUB */
+#define ngx_atomic_dec(x)   (*(x))--;
+/**/
+
+
+static ngx_inline uint32_t ngx_atomic_cmp_set(ngx_atomic_t *lock,
+                                              ngx_atomic_t old,
+                                              ngx_atomic_t set)
+{
+    uint32_t  res = (u_int32_t) set;
+
+    __asm__ volatile (
+
+    "casa [%1]ASI_P, %2, %0"
+
+    : "+r" (res) : "r" (lock), "r" (old));
+
+    return (res == old);
+}
+
 #else
 
 typedef volatile uint32_t  ngx_atomic_t;
