Skip to content

Commit

Permalink
OpenBSD, endianess and clustering fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
roberto@silente committed Dec 16, 2010
1 parent 6cb1203 commit 12d9641
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 4 deletions.
28 changes: 25 additions & 3 deletions lock.c
Expand Up @@ -134,14 +134,36 @@ void uwsgi_rwunlock(void *lock) { uwsgi_unlock(lock); }
#define UWSGI_LOCK_SIZE 8
#define UWSGI_RWLOCK_SIZE 8

void uwsgi_lock_init(void *lock) {}
static int lock_counter = 0;

void uwsgi_lock_init(void *lock) {

char filename[17];

if (snprintf(filename, 17, ".uwsgiflock%d", lock_counter) < 0) {
uwsgi_log("unable to create lock %d\n", lock_counter);
}

int fd = open(filename, O_CREAT|O_RDWR|O_TRUNC);
if (fd < 0) {
uwsgi_error("open()");
exit(1);
}

memcpy(lock, &fd, sizeof(int));
}

void uwsgi_lock(void *lock) {
//if (flock((int) *lock, LOCK_EX)) { uwsgi_error("flock()"); }

int fd;
memcpy(&fd, lock, sizeof(int));
if (flock(fd, LOCK_EX)) { uwsgi_error("flock()"); }
}

void uwsgi_unlock(void *lock) {
//if (flock((int) *lock, LOCK_UN)) { uwsgi_error("flock()"); }
int fd;
memcpy(&fd, lock, sizeof(int));
if (flock(fd, LOCK_UN)) { uwsgi_error("flock()"); }
}

void uwsgi_rwlock_init(void *lock) { uwsgi_lock_init(lock) ;}
Expand Down
14 changes: 14 additions & 0 deletions master.c
Expand Up @@ -245,6 +245,10 @@ void master_loop(char **argv, char **environ) {
uh->modifier1 = 99;
uh->pktsize = cluster_opt_size - 4;
uh->modifier2 = 1;

#ifdef __BIG_ENDIAN__
uh->pktsize = uwsgi_swap16(uh->pktsize);
#endif

cptrbuf = cluster_opt_buf+4;

Expand Down Expand Up @@ -593,12 +597,19 @@ void master_loop(char **argv, char **environ) {
switch(uwsgi.wsgi_requests[0]->uh.modifier1) {
case 95:
memset(&nucn, 0, sizeof(struct uwsgi_cluster_node));

#ifdef __BIG_ENDIAN__
uwsgi.wsgi_requests[0]->uh.pktsize = uwsgi_swap16(uwsgi.wsgi_requests[0]->uh.pktsize);
#endif
uwsgi_hooked_parse(uwsgi.wsgi_requests[0]->buffer, uwsgi.wsgi_requests[0]->uh.pktsize, manage_cluster_announce, &nucn);
if (nucn.name[0] != 0) {
uwsgi_cluster_add_node(&nucn, CLUSTER_NODE_DYNAMIC);
}
break;
case 96:
#ifdef __BIG_ENDIAN__
uwsgi.wsgi_requests[0]->uh.pktsize = uwsgi_swap16(uwsgi.wsgi_requests[0]->uh.pktsize);
#endif
uwsgi_log_verbose("%.*s\n", uwsgi.wsgi_requests[0]->uh.pktsize, uwsgi.wsgi_requests[0]->buffer);
break;
case 98:
Expand All @@ -614,6 +625,9 @@ void master_loop(char **argv, char **environ) {
}
break;
case 73:
#ifdef __BIG_ENDIAN__
uwsgi.wsgi_requests[0]->uh.pktsize = uwsgi_swap16(uwsgi.wsgi_requests[0]->uh.pktsize);
#endif
uwsgi_log_verbose("[uWSGI cluster %s] new node available: %.*s\n", uwsgi.cluster, uwsgi.wsgi_requests[0]->uh.pktsize, uwsgi.wsgi_requests[0]->buffer);
break;
}
Expand Down
7 changes: 6 additions & 1 deletion plugins/http/http.c
Expand Up @@ -548,9 +548,10 @@ void http_loop() {
continue;
}

uhttp_session->timeout = reset_timeout(uhttp_session);

switch(uhttp_session->status) {

uhttp_session->timeout = reset_timeout(uhttp_session);

case HTTP_STATUS_RECV:
len = recv(uhttp_session->fd, uhttp_session->buffer + uhttp_session->h_pos, UMAX16-uhttp_session->h_pos, 0);
Expand Down Expand Up @@ -681,6 +682,10 @@ void http_loop() {
break;
}

#ifdef __BIG_ENDIAN__
uhttp_session->uh.pktsize = uwsgi_swap16(uhttp_session->uh.pktsize);
#endif

uhttp_session->iov[0].iov_base = &uhttp_session->uh;
uhttp_session->iov[0].iov_len = 4;

Expand Down
3 changes: 3 additions & 0 deletions protocol.c
Expand Up @@ -893,6 +893,9 @@ int uwsgi_string_sendto(int fd, uint8_t modifier1, uint8_t modifier2, struct soc

uh->modifier1 = modifier1;
uh->pktsize = len;
#ifdef __BIG_ENDIAN__
uh->pktsize = uwsgi_swap16(uh->pktsize);
#endif
uh->modifier2 = modifier2;

memcpy(upkt+4, message, len);
Expand Down
6 changes: 6 additions & 0 deletions uwsgi.c
Expand Up @@ -1954,10 +1954,12 @@ uwsgi.shared->hooks[UWSGI_MODIFIER_PING] = uwsgi_request_ping; //100
return 1;
case LONG_ARGS_CLUSTER:
uwsgi.cluster = optarg;
uwsgi.master_process = 1;
return 1;
case LONG_ARGS_CLUSTER_NODES:
uwsgi.cluster = optarg;
uwsgi.cluster_nodes = 1;
uwsgi.master_process = 1;
return 1;
#endif
case LONG_ARGS_CHROOT:
Expand Down Expand Up @@ -2151,7 +2153,11 @@ uwsgi.shared->hooks[UWSGI_MODIFIER_PING] = uwsgi_request_ping; //100
uwsgi.numproc = rl.rlim_max;
}
else {
#ifdef _SC_NPROCESSORS_ONLN
uwsgi.numproc = (sysconf(_SC_NPROCESSORS_ONLN))*2;
#else
uwsgi.numproc = 1;
#endif
}
}
else {
Expand Down

0 comments on commit 12d9641

Please sign in to comment.