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;
|