Mercurial > hg > graal-jvmci-8
comparison src/os/solaris/vm/os_solaris.cpp @ 4717:11c26bfcf8c7
7091417: recvfrom's 6th input should be of type socklen_t
Summary: Revamp class os's socket method formal args to match socket.h, insert casts in appropriate places, and copyin-copyout int*'s that s/b socklen_t*'s in jvm.cpp.
Reviewed-by: coleenp, dholmes
Contributed-by: erik.gahlin@oracle.com, rickard.backman@oracle.com, nils.loodin@oracle.com, markus.gronlund@oracle.com
author | phh |
---|---|
date | Wed, 21 Dec 2011 15:48:16 -0500 |
parents | 36b057451829 |
children | 4b18532913c7 |
comparison
equal
deleted
inserted
replaced
4716:4502fd5c7698 | 4717:11c26bfcf8c7 |
---|---|
6361 | 6361 |
6362 int os::socket_close(int fd) { | 6362 int os::socket_close(int fd) { |
6363 RESTARTABLE_RETURN_INT(::close(fd)); | 6363 RESTARTABLE_RETURN_INT(::close(fd)); |
6364 } | 6364 } |
6365 | 6365 |
6366 int os::recv(int fd, char *buf, int nBytes, int flags) { | 6366 int os::recv(int fd, char* buf, size_t nBytes, uint flags) { |
6367 INTERRUPTIBLE_RETURN_INT(::recv(fd, buf, nBytes, flags), os::Solaris::clear_interrupted); | 6367 INTERRUPTIBLE_RETURN_INT((int)::recv(fd, buf, nBytes, flags), os::Solaris::clear_interrupted); |
6368 } | 6368 } |
6369 | 6369 |
6370 | 6370 int os::send(int fd, char* buf, size_t nBytes, uint flags) { |
6371 int os::send(int fd, char *buf, int nBytes, int flags) { | 6371 INTERRUPTIBLE_RETURN_INT((int)::send(fd, buf, nBytes, flags), os::Solaris::clear_interrupted); |
6372 INTERRUPTIBLE_RETURN_INT(::send(fd, buf, nBytes, flags), os::Solaris::clear_interrupted); | 6372 } |
6373 } | 6373 |
6374 | 6374 int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) { |
6375 int os::raw_send(int fd, char *buf, int nBytes, int flags) { | 6375 RESTARTABLE_RETURN_INT((int)::send(fd, buf, nBytes, flags)); |
6376 RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, flags)); | |
6377 } | 6376 } |
6378 | 6377 |
6379 // As both poll and select can be interrupted by signals, we have to be | 6378 // As both poll and select can be interrupted by signals, we have to be |
6380 // prepared to restart the system call after updating the timeout, unless | 6379 // prepared to restart the system call after updating the timeout, unless |
6381 // a poll() is done with timeout == -1, in which case we repeat with this | 6380 // a poll() is done with timeout == -1, in which case we repeat with this |
6406 } | 6405 } |
6407 } else return res; | 6406 } else return res; |
6408 } | 6407 } |
6409 } | 6408 } |
6410 | 6409 |
6411 int os::connect(int fd, struct sockaddr *him, int len) { | 6410 int os::connect(int fd, struct sockaddr *him, socklen_t len) { |
6412 int _result; | 6411 int _result; |
6413 INTERRUPTIBLE_NORESTART(::connect(fd, him, len), _result, | 6412 INTERRUPTIBLE_NORESTART(::connect(fd, him, len), _result,\ |
6414 os::Solaris::clear_interrupted); | 6413 os::Solaris::clear_interrupted); |
6415 | 6414 |
6416 // Depending on when thread interruption is reset, _result could be | 6415 // Depending on when thread interruption is reset, _result could be |
6417 // one of two values when errno == EINTR | 6416 // one of two values when errno == EINTR |
6418 | 6417 |
6419 if (((_result == OS_INTRPT) || (_result == OS_ERR)) | 6418 if (((_result == OS_INTRPT) || (_result == OS_ERR)) |
6420 && (errno == EINTR)) { | 6419 && (errno == EINTR)) { |
6421 /* restarting a connect() changes its errno semantics */ | 6420 /* restarting a connect() changes its errno semantics */ |
6422 INTERRUPTIBLE(::connect(fd, him, len), _result, | 6421 INTERRUPTIBLE(::connect(fd, him, len), _result,\ |
6423 os::Solaris::clear_interrupted); | 6422 os::Solaris::clear_interrupted); |
6424 /* undo these changes */ | 6423 /* undo these changes */ |
6425 if (_result == OS_ERR) { | 6424 if (_result == OS_ERR) { |
6426 if (errno == EALREADY) { | 6425 if (errno == EALREADY) { |
6427 errno = EINPROGRESS; /* fall through */ | 6426 errno = EINPROGRESS; /* fall through */ |
6428 } else if (errno == EISCONN) { | 6427 } else if (errno == EISCONN) { |
6432 } | 6431 } |
6433 } | 6432 } |
6434 return _result; | 6433 return _result; |
6435 } | 6434 } |
6436 | 6435 |
6437 int os::accept(int fd, struct sockaddr *him, int *len) { | 6436 int os::accept(int fd, struct sockaddr* him, socklen_t* len) { |
6438 if (fd < 0) | 6437 if (fd < 0) { |
6439 return OS_ERR; | 6438 return OS_ERR; |
6440 INTERRUPTIBLE_RETURN_INT((int)::accept(fd, him,\ | 6439 } |
6441 (socklen_t*) len), os::Solaris::clear_interrupted); | 6440 INTERRUPTIBLE_RETURN_INT((int)::accept(fd, him, len),\ |
6442 } | 6441 os::Solaris::clear_interrupted); |
6443 | 6442 } |
6444 int os::recvfrom(int fd, char *buf, int nBytes, int flags, | 6443 |
6445 sockaddr *from, int *fromlen) { | 6444 int os::recvfrom(int fd, char* buf, size_t nBytes, uint flags, |
6446 //%%note jvm_r11 | 6445 sockaddr* from, socklen_t* fromlen) { |
6447 INTERRUPTIBLE_RETURN_INT((int)::recvfrom(fd, buf, nBytes,\ | 6446 INTERRUPTIBLE_RETURN_INT((int)::recvfrom(fd, buf, nBytes, flags, from, fromlen),\ |
6448 flags, from, fromlen), os::Solaris::clear_interrupted); | 6447 os::Solaris::clear_interrupted); |
6449 } | 6448 } |
6450 | 6449 |
6451 int os::sendto(int fd, char *buf, int len, int flags, | 6450 int os::sendto(int fd, char* buf, size_t len, uint flags, |
6452 struct sockaddr *to, int tolen) { | 6451 struct sockaddr* to, socklen_t tolen) { |
6453 //%%note jvm_r11 | 6452 INTERRUPTIBLE_RETURN_INT((int)::sendto(fd, buf, len, flags, to, tolen),\ |
6454 INTERRUPTIBLE_RETURN_INT((int)::sendto(fd, buf, len, flags,\ | 6453 os::Solaris::clear_interrupted); |
6455 to, tolen), os::Solaris::clear_interrupted); | |
6456 } | 6454 } |
6457 | 6455 |
6458 int os::socket_available(int fd, jint *pbytes) { | 6456 int os::socket_available(int fd, jint *pbytes) { |
6459 if (fd < 0) | 6457 if (fd < 0) { |
6460 return OS_OK; | 6458 return OS_OK; |
6461 | 6459 } |
6462 int ret; | 6460 int ret; |
6463 | 6461 RESTARTABLE(::ioctl(fd, FIONREAD, pbytes), ret); |
6464 RESTARTABLE(::ioctl(fd, FIONREAD, pbytes), ret); | 6462 // note: ioctl can return 0 when successful, JVM_SocketAvailable |
6465 | 6463 // is expected to return 0 on failure and 1 on success to the jdk. |
6466 //%% note ioctl can return 0 when successful, JVM_SocketAvailable | 6464 return (ret == OS_ERR) ? 0 : 1; |
6467 // is expected to return 0 on failure and 1 on success to the jdk. | 6465 } |
6468 | 6466 |
6469 return (ret == OS_ERR) ? 0 : 1; | 6467 int os::bind(int fd, struct sockaddr* him, socklen_t len) { |
6470 } | |
6471 | |
6472 | |
6473 int os::bind(int fd, struct sockaddr *him, int len) { | |
6474 INTERRUPTIBLE_RETURN_INT_NORESTART(::bind(fd, him, len),\ | 6468 INTERRUPTIBLE_RETURN_INT_NORESTART(::bind(fd, him, len),\ |
6475 os::Solaris::clear_interrupted); | 6469 os::Solaris::clear_interrupted); |
6476 } | 6470 } |