You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/09/02 18:50:39 UTC
svn commit: r810604 - in /commons/sandbox/runtime/trunk/src/main/native:
include/arch/unix/acr_arch.h os/unix/pmutex.c os/unix/pshm.c os/unix/uutils.c
Author: mturk
Date: Wed Sep 2 16:50:39 2009
New Revision: 810604
URL: http://svn.apache.org/viewvc?rev=810604&view=rev
Log:
Use restartable versions of read() and write()
Modified:
commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h
commons/sandbox/runtime/trunk/src/main/native/os/unix/pmutex.c
commons/sandbox/runtime/trunk/src/main/native/os/unix/pshm.c
commons/sandbox/runtime/trunk/src/main/native/os/unix/uutils.c
Modified: commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h?rev=810604&r1=810603&r2=810604&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h Wed Sep 2 16:50:39 2009
@@ -106,6 +106,28 @@
}
}
+/* restartable read() */
+static ACR_INLINE ssize_t r_read(int fd, void *buf, size_t count)
+{
+ ssize_t r;
+ do {
+ r = read(fd, buf, count);
+ } while (r < 0 && errno == EINTR);
+
+ return r;
+}
+
+/* restartable write() */
+static ACR_INLINE ssize_t r_write(int fd, const void *buf, size_t count)
+{
+ ssize_t w;
+ do {
+ w = write(fd, buf, count);
+ } while (w < 0 && errno == EINTR);
+
+ return w;
+}
+
/**
* Secure version of zero memory
* It should force compiler to always set the
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/pmutex.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/pmutex.c?rev=810604&r1=810603&r2=810604&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/pmutex.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/pmutex.c Wed Sep 2 16:50:39 2009
@@ -152,7 +152,7 @@
if (fname) {
size_t nbytes;
semblock_t hdr;
- int fs, fd = -1;
+ int fd = -1;
fd = open(fname, O_WRONLY | O_CREAT | O_EXCL, 0660);
if (fd < 0) {
@@ -175,10 +175,7 @@
hdr.creator = getpid();
hdr.magic = ACR_MTX_MAGIC;
hdr.value = 1;
- do {
- fs = write(fd,(const void *)&hdr, nbytes);
- } while (fs == (acr_size_t)-1 && errno == EINTR);
- if (fs == -1) {
+ if (r_write(fd,(const void *)&hdr, nbytes) < 0) {
rc = ACR_GET_OS_ERROR();
close(fd);
ACR_THROW_IO_IF_ERR(rc);
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/pshm.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/pshm.c?rev=810604&r1=810603&r2=810604&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/pshm.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/pshm.c Wed Sep 2 16:50:39 2009
@@ -202,7 +202,7 @@
acr_shm_t *shm = NULL;
struct shmid_ds shmbuf;
int file; /* file where metadata is stored */
- int rc;
+ int rc = 0;
acr_size_t nbytes;
if (reqsize > ACR_SIZE_T_MAX) {
@@ -291,10 +291,8 @@
hdr.magic = ACR_SHM_MAGIC;
hdr.size = shm->reqsize;
hdr.length = shm->realsize;
- do {
- rc = write(file,(const void *)&hdr, nbytes);
- } while (rc == (acr_size_t)-1 && errno == EINTR);
- if (rc == -1) {
+
+ if (r_write(file, (const void *)&hdr, nbytes) < 0) {
rc = ACR_GET_OS_ERROR();
goto finally;
}
@@ -348,9 +346,7 @@
nbytes = sizeof(memblock_t);
- do {
- rc = read(file, (void *)&hdr, nbytes);
- } while (rc == -1 && errno == EINTR);
+ rc = r_read(file, (void *)&hdr, nbytes);
if (rc != nbytes) {
/* Wrong format */
rc = EBADF;
@@ -359,6 +355,7 @@
}
rc = close(file);
if (rc) {
+ rc = ACR_GET_OS_ERROR();
goto finally;
}
if (hdr.magic != ACR_SHM_MAGIC) {
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/uutils.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/uutils.c?rev=810604&r1=810603&r2=810604&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/uutils.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/uutils.c Wed Sep 2 16:50:39 2009
@@ -62,4 +62,3 @@
fclose(f);
return b;
}
-