src/solaris/native/sun/nio/ch/FileDispatcherImpl.c

Print this page




 174 
 175     fl.l_whence = SEEK_SET;
 176     if (size == (jlong)java_lang_Long_MAX_VALUE) {
 177         fl.l_len = (off64_t)0;
 178     } else {
 179         fl.l_len = (off64_t)size;
 180     }
 181     fl.l_start = (off64_t)pos;
 182     if (shared == JNI_TRUE) {
 183         fl.l_type = F_RDLCK;
 184     } else {
 185         fl.l_type = F_WRLCK;
 186     }
 187     if (block == JNI_TRUE) {
 188         cmd = F_SETLKW64;
 189     } else {
 190         cmd = F_SETLK64;
 191     }
 192     lockResult = fcntl(fd, cmd, &fl);
 193     if (lockResult < 0) {
 194         if ((cmd == F_SETLK64) && (errno == EAGAIN))
 195             return sun_nio_ch_FileDispatcherImpl_NO_LOCK;
 196         if (errno == EINTR)
 197             return sun_nio_ch_FileDispatcherImpl_INTERRUPTED;
 198         JNU_ThrowIOExceptionWithLastError(env, "Lock failed");
 199     }
 200     return 0;
 201 }
 202 
 203 JNIEXPORT void JNICALL
 204 Java_sun_nio_ch_FileDispatcherImpl_release0(JNIEnv *env, jobject this,
 205                                          jobject fdo, jlong pos, jlong size)
 206 {
 207     jint fd = fdval(env, fdo);
 208     jint lockResult = 0;
 209     struct flock64 fl;
 210     int cmd = F_SETLK64;
 211 
 212     fl.l_whence = SEEK_SET;
 213     if (size == (jlong)java_lang_Long_MAX_VALUE) {
 214         fl.l_len = (off64_t)0;




 174 
 175     fl.l_whence = SEEK_SET;
 176     if (size == (jlong)java_lang_Long_MAX_VALUE) {
 177         fl.l_len = (off64_t)0;
 178     } else {
 179         fl.l_len = (off64_t)size;
 180     }
 181     fl.l_start = (off64_t)pos;
 182     if (shared == JNI_TRUE) {
 183         fl.l_type = F_RDLCK;
 184     } else {
 185         fl.l_type = F_WRLCK;
 186     }
 187     if (block == JNI_TRUE) {
 188         cmd = F_SETLKW64;
 189     } else {
 190         cmd = F_SETLK64;
 191     }
 192     lockResult = fcntl(fd, cmd, &fl);
 193     if (lockResult < 0) {
 194         if ((cmd == F_SETLK64) && (errno == EAGAIN || errno == EACCES))
 195             return sun_nio_ch_FileDispatcherImpl_NO_LOCK;
 196         if (errno == EINTR)
 197             return sun_nio_ch_FileDispatcherImpl_INTERRUPTED;
 198         JNU_ThrowIOExceptionWithLastError(env, "Lock failed");
 199     }
 200     return 0;
 201 }
 202 
 203 JNIEXPORT void JNICALL
 204 Java_sun_nio_ch_FileDispatcherImpl_release0(JNIEnv *env, jobject this,
 205                                          jobject fdo, jlong pos, jlong size)
 206 {
 207     jint fd = fdval(env, fdo);
 208     jint lockResult = 0;
 209     struct flock64 fl;
 210     int cmd = F_SETLK64;
 211 
 212     fl.l_whence = SEEK_SET;
 213     if (size == (jlong)java_lang_Long_MAX_VALUE) {
 214         fl.l_len = (off64_t)0;