aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2004-06-21 19:22:53 +0000
committerIgor Sysoev <igor@sysoev.ru>2004-06-21 19:22:53 +0000
commitb14169a714bb3deeb7f4912a58238f7a54aeecd1 (patch)
tree6f1cd4f91e2239d74e8075cbc7fb965d8d93cb49 /src
parentef06648615d6ce6e000e6c737f80c2ba9fa04d3a (diff)
downloadnginx-b14169a714bb3deeb7f4912a58238f7a54aeecd1.tar.gz
nginx-b14169a714bb3deeb7f4912a58238f7a54aeecd1.zip
nginx-0.0.7-2004-06-21-23:22:53 import
Diffstat (limited to 'src')
-rw-r--r--src/event/ngx_event_spinlock.c26
-rw-r--r--src/http/ngx_http_write_filter.c3
-rw-r--r--src/os/win32/ngx_os.h9
-rw-r--r--src/os/win32/ngx_win32_config.h17
-rw-r--r--src/os/win32/ngx_wsasend_chain.c6
5 files changed, 54 insertions, 7 deletions
diff --git a/src/event/ngx_event_spinlock.c b/src/event/ngx_event_spinlock.c
new file mode 100644
index 000000000..58edb2af5
--- /dev/null
+++ b/src/event/ngx_event_spinlock.c
@@ -0,0 +1,26 @@
+
+
+void _spinlock(ngx_atomic_t *lock)
+{
+ ngx_int_t tries;
+
+ tries = 0;
+
+ for ( ;; ) {
+
+ if (*lock) {
+ if (ngx_ncpu > 1 && tries++ < 1000) {
+ continue;
+ }
+
+ sched_yield();
+ tries = 0;
+
+ } else {
+ if (ngx_atomic_cmp_set(lock, 0, 1)) {
+ return;
+ }
+ }
+ }
+}
+
diff --git a/src/http/ngx_http_write_filter.c b/src/http/ngx_http_write_filter.c
index f82bdaede..2d4ba23bb 100644
--- a/src/http/ngx_http_write_filter.c
+++ b/src/http/ngx_http_write_filter.c
@@ -162,7 +162,8 @@ ngx_int_t ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in)
if (conf->limit_rate) {
sent = r->connection->sent - sent;
r->connection->write->delayed = 1;
- ngx_add_timer(r->connection->write, sent * 1000 / conf->limit_rate);
+ ngx_add_timer(r->connection->write,
+ (ngx_msec_t) sent * 1000 / conf->limit_rate);
}
if (chain == NGX_CHAIN_ERROR) {
diff --git a/src/os/win32/ngx_os.h b/src/os/win32/ngx_os.h
index 2fae21b84..aa66e70d3 100644
--- a/src/os/win32/ngx_os.h
+++ b/src/os/win32/ngx_os.h
@@ -26,7 +26,8 @@ typedef struct {
ssize_t (*recv)(ngx_connection_t *c, u_char *buf, size_t size);
ssize_t (*recv_chain)(ngx_connection_t *c, ngx_chain_t *in);
ssize_t (*send)(ngx_connection_t *c, u_char *buf, size_t size);
- ngx_chain_t *(*send_chain)(ngx_connection_t *c, ngx_chain_t *in);
+ ngx_chain_t *(*send_chain)(ngx_connection_t *c, ngx_chain_t *in,
+ off_t limit);
int flags;
} ngx_os_io_t;
@@ -36,8 +37,10 @@ int ngx_os_init(ngx_log_t *log);
ssize_t ngx_wsarecv(ngx_connection_t *c, u_char *buf, size_t size);
ssize_t ngx_overlapped_wsarecv(ngx_connection_t *c, u_char *buf, size_t size);
ssize_t ngx_wsarecv_chain(ngx_connection_t *c, ngx_chain_t *chain);
-ngx_chain_t *ngx_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in);
-ngx_chain_t *ngx_overlapped_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in);
+ngx_chain_t *ngx_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in,
+ off_t limit);
+ngx_chain_t *ngx_overlapped_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in,
+ off_t limit);
extern ngx_os_io_t ngx_os_io;
diff --git a/src/os/win32/ngx_win32_config.h b/src/os/win32/ngx_win32_config.h
index cc3a06842..72e5c5e79 100644
--- a/src/os/win32/ngx_win32_config.h
+++ b/src/os/win32/ngx_win32_config.h
@@ -30,16 +30,28 @@
/* disable some "-W4" level warnings */
-#pragma warning(disable:4054)
+/* disable warnings about some 'type cast */
#pragma warning(disable:4054)
#pragma warning(disable:4055)
+
/* unreferenced formal parameter */
#pragma warning(disable:4100)
+
+/* conditional expression is constant */
#pragma warning(disable:4127)
+
+/* nonstandard extension used : bit field types other than int */
#pragma warning(disable:4214)
+
+/* unreachable code */
#pragma warning(disable:4702)
+
+/* assignment within conditional expression */
#pragma warning(disable:4706)
+/* disable "function 'ngx_handle_write_event' not inlined" */
+#pragma warning(disable:4710)
+
#endif
@@ -121,6 +133,9 @@ typedef uint32_t ngx_atomic_t;
#endif
+#define OFF_T_MAX_VALUE 9223372036854775807
+
+
/* STUB */
#define HAVE_LITTLE_ENDIAN 1
diff --git a/src/os/win32/ngx_wsasend_chain.c b/src/os/win32/ngx_wsasend_chain.c
index 4ada9ea4e..eda422ed2 100644
--- a/src/os/win32/ngx_wsasend_chain.c
+++ b/src/os/win32/ngx_wsasend_chain.c
@@ -4,7 +4,8 @@
#include <ngx_event.h>
-ngx_chain_t *ngx_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in)
+ngx_chain_t *ngx_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in,
+ off_t limit)
{
int rc;
u_char *prev;
@@ -99,7 +100,8 @@ ngx_chain_t *ngx_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in)
}
-ngx_chain_t *ngx_overlapped_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in)
+ngx_chain_t *ngx_overlapped_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in,
+ off_t limit)
{
int rc;
u_char *prev;