Cleaned up the locking code to make it more fine grained. Did this since
dncache.c has locking itself now.
This commit is contained in:
parent
9bdfa623ba
commit
fcff398f31
28
src/sock.c
28
src/sock.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: sock.c,v 1.5 2001-05-27 02:31:20 rjkaes Exp $
|
/* $Id: sock.c,v 1.6 2001-08-29 04:00:22 rjkaes Exp $
|
||||||
*
|
*
|
||||||
* Sockets are created and destroyed here. When a new connection comes in from
|
* Sockets are created and destroyed here. When a new connection comes in from
|
||||||
* a client, we need to copy the socket and the create a second socket to the
|
* a client, we need to copy the socket and the create a second socket to the
|
||||||
@ -29,16 +29,14 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The mutex is used for locking around the calls to the dnscache since I
|
* The mutex is used for locking around any calls which access global
|
||||||
* don't want multiple threads accessing the linked list at the same time.
|
* variables.
|
||||||
* This should be more fine grained, but it will do for now.
|
|
||||||
* - rjkaes
|
* - rjkaes
|
||||||
*/
|
*/
|
||||||
static pthread_mutex_t sock_mutex = PTHREAD_MUTEX_INITIALIZER;
|
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
#define SOCK_LOCK() pthread_mutex_lock(&sock_mutex);
|
|
||||||
#define SOCK_UNLOCK() pthread_mutex_unlock(&sock_mutex);
|
|
||||||
|
|
||||||
|
#define LOCK() pthread_mutex_lock(&mutex);
|
||||||
|
#define UNLOCK() pthread_mutex_unlock(&mutex);
|
||||||
|
|
||||||
/* This routine is so old I can't even remember writing it. But I do
|
/* This routine is so old I can't even remember writing it. But I do
|
||||||
* remember that it was an .h file because I didn't know putting code in a
|
* remember that it was an .h file because I didn't know putting code in a
|
||||||
@ -64,13 +62,8 @@ int opensock(char *ip_addr, uint16_t port)
|
|||||||
|
|
||||||
port_info.sin_family = AF_INET;
|
port_info.sin_family = AF_INET;
|
||||||
|
|
||||||
/* chris - Could block; neet to ensure that this is never called
|
/* Lookup and return the address if possible */
|
||||||
* before a non-blocking DNS query happens for this address. Not
|
|
||||||
* relevant in the code as it stands.
|
|
||||||
*/
|
|
||||||
SOCK_LOCK();
|
|
||||||
ret = dnscache(&port_info.sin_addr, ip_addr);
|
ret = dnscache(&port_info.sin_addr, ip_addr);
|
||||||
SOCK_UNLOCK();
|
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
log_message(LOG_ERR, "opensock: Could not lookup address: %s", ip_addr);
|
log_message(LOG_ERR, "opensock: Could not lookup address: %s", ip_addr);
|
||||||
@ -194,14 +187,13 @@ char *getpeer_string(int fd, char *string)
|
|||||||
if (getpeername(fd, (struct sockaddr *)&name, &namelen) != 0) {
|
if (getpeername(fd, (struct sockaddr *)&name, &namelen) != 0) {
|
||||||
log_message(LOG_ERR, "Connect: 'could not get peer name'");
|
log_message(LOG_ERR, "Connect: 'could not get peer name'");
|
||||||
} else {
|
} else {
|
||||||
SOCK_LOCK();
|
LOCK();
|
||||||
peername = gethostbyaddr((char *)&name.sin_addr.s_addr,
|
peername = gethostbyaddr((char *)&name.sin_addr.s_addr,
|
||||||
sizeof(name.sin_addr.s_addr),
|
sizeof(name.sin_addr.s_addr),
|
||||||
AF_INET);
|
AF_INET);
|
||||||
if (peername) {
|
if (peername)
|
||||||
strlcpy(string, peername->h_name, PEER_STRING_LENGTH);
|
strlcpy(string, peername->h_name, PEER_STRING_LENGTH);
|
||||||
}
|
UNLOCK();
|
||||||
SOCK_UNLOCK();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return string;
|
return string;
|
||||||
|
Loading…
Reference in New Issue
Block a user