Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.1:Staging:C
star
star-lock.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File star-lock.diff of Package star
--- star/fifo.c +++ star/fifo.c 2009-03-10 17:52:09.292002187 +0100 @@ -477,13 +477,42 @@ LOCAL int swait(f) int f; { - int ret; + int ret, err; unsigned char c; + struct flock lock; + useconds_t wait; + + wait = 500000; + lock.l_type = F_RDLCK; + lock.l_whence = SEEK_CUR; + lock.l_start = 0; + lock.l_len = 0; + do { + err = fcntl(f, F_SETLK, &lock); + if (err < 0) { + err = geterrno(); + if (err == EINTR) + continue; + if ((err == EACCES || err == EAGAIN) && (wait > 0)) { + usleep(10000); + wait -= 10000; + continue; + } + errmsg("Can not get lock on semaphore wait for file descriptor\n"); + exprstats(-1); + } + } while (0); seterrno(0); do { ret = read(f, &c, 1); } while (ret < 0 && geterrno() == EINTR); + + lock.l_type = F_UNLCK; + do { + err = fcntl(f, F_SETLK, &lock); + } while (err < 0 && geterrno() == EINTR); + if (ret < 0 || (ret == 0 && pid)) { /* * If pid != 0, this is the foreground process
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor