post-fixups for patch #9262: fix SO_ERROR, fix !LWIP_TCPIP_CORE_LOCKING

This commit is contained in:
goldsimon 2017-02-20 12:43:45 +01:00
parent 703a22fae5
commit d1049511cc
2 changed files with 10 additions and 8 deletions

View File

@ -1783,6 +1783,7 @@ lwip_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen)
int err; int err;
struct lwip_sock *sock = get_socket(s); struct lwip_sock *sock = get_socket(s);
#if !LWIP_TCPIP_CORE_LOCKING #if !LWIP_TCPIP_CORE_LOCKING
err_t cberr;
LWIP_SETGETSOCKOPT_DATA_VAR_DECLARE(data); LWIP_SETGETSOCKOPT_DATA_VAR_DECLARE(data);
#endif /* !LWIP_TCPIP_CORE_LOCKING */ #endif /* !LWIP_TCPIP_CORE_LOCKING */
@ -1825,10 +1826,10 @@ lwip_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen)
#else #else
LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem = &sock->conn->op_completed; LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem = &sock->conn->op_completed;
#endif #endif
err = tcpip_callback(lwip_getsockopt_callback, &LWIP_SETGETSOCKOPT_DATA_VAR_REF(data)); cberr = tcpip_callback(lwip_getsockopt_callback, &LWIP_SETGETSOCKOPT_DATA_VAR_REF(data));
if (err != ERR_OK) { if (cberr != ERR_OK) {
LWIP_SETGETSOCKOPT_DATA_VAR_FREE(data); LWIP_SETGETSOCKOPT_DATA_VAR_FREE(data);
sock_set_errno(sock, err_to_errno(err)); sock_set_errno(sock, err_to_errno(cberr));
return -1; return -1;
} }
sys_arch_sem_wait((sys_sem_t*)(LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem), 0); sys_arch_sem_wait((sys_sem_t*)(LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem), 0);
@ -1944,7 +1945,7 @@ lwip_getsockopt_impl(int s, int level, int optname, void *optval, socklen_t *opt
if (((sock->err == 0) || (sock->err == EINPROGRESS)) && (sock->conn != NULL)) { if (((sock->err == 0) || (sock->err == EINPROGRESS)) && (sock->conn != NULL)) {
sock_set_errno(sock, err_to_errno(sock->conn->last_err)); sock_set_errno(sock, err_to_errno(sock->conn->last_err));
} }
*(int *)optval = (sock->err == 0xFF ? (int)-1 : (int)sock->err); *(int *)optval = sock->err;
sock->err = 0; sock->err = 0;
LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, SO_ERROR) = %d\n", LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, SO_ERROR) = %d\n",
s, *(int *)optval)); s, *(int *)optval));
@ -2189,6 +2190,7 @@ lwip_setsockopt(int s, int level, int optname, const void *optval, socklen_t opt
int err = 0; int err = 0;
struct lwip_sock *sock = get_socket(s); struct lwip_sock *sock = get_socket(s);
#if !LWIP_TCPIP_CORE_LOCKING #if !LWIP_TCPIP_CORE_LOCKING
err_t cberr;
LWIP_SETGETSOCKOPT_DATA_VAR_DECLARE(data); LWIP_SETGETSOCKOPT_DATA_VAR_DECLARE(data);
#endif /* !LWIP_TCPIP_CORE_LOCKING */ #endif /* !LWIP_TCPIP_CORE_LOCKING */
@ -2233,10 +2235,10 @@ lwip_setsockopt(int s, int level, int optname, const void *optval, socklen_t opt
#else #else
LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem = &sock->conn->op_completed; LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem = &sock->conn->op_completed;
#endif #endif
err = tcpip_callback(lwip_setsockopt_callback, &LWIP_SETGETSOCKOPT_DATA_VAR_REF(data)); cberr = tcpip_callback(lwip_setsockopt_callback, &LWIP_SETGETSOCKOPT_DATA_VAR_REF(data));
if (err != ERR_OK) { if (cberr != ERR_OK) {
LWIP_SETGETSOCKOPT_DATA_VAR_FREE(data); LWIP_SETGETSOCKOPT_DATA_VAR_FREE(data);
sock_set_errno(sock, err_to_errno(err)); sock_set_errno(sock, err_to_errno(cberr));
return -1; return -1;
} }
sys_arch_sem_wait((sys_sem_t*)(LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem), 0); sys_arch_sem_wait((sys_sem_t*)(LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem), 0);

View File

@ -82,7 +82,7 @@ struct lwip_setgetsockopt_data {
/** size of *optval */ /** size of *optval */
socklen_t optlen; socklen_t optlen;
/** if an error occurs, it is temporarily stored here */ /** if an error occurs, it is temporarily stored here */
err_t err; int err;
/** semaphore to wake up the calling task */ /** semaphore to wake up the calling task */
void* completed_sem; void* completed_sem;
}; };