View | Details | Raw Unified | Return to issue 83838
Collapse All | Expand All

(-)file.cxx (+20 lines)
Lines 290-295 Link Here
290
        {
290
        {
291
            flags &= ~O_EXLOCK;
291
            flags &= ~O_EXLOCK;
292
            flags |= O_SHLOCK;
292
            flags |= O_SHLOCK;
293
        }
294
        else
295
        {
296
            /* Needed flags to allow opening a webdav file */
297
            flags &= ~( O_EXLOCK | O_SHLOCK );
293
        }    
298
        }    
294
    }
299
    }
295
300
Lines 689-695 Link Here
689
                        aflock.l_type = 0;
694
                        aflock.l_type = 0;
690
695
691
                    /* lock the file if flock.l_type is set */
696
                    /* lock the file if flock.l_type is set */
697
#ifdef MACOSX
698
                    bLocked = ( F_WRLCK != aflock.l_type );
699
                    if (!bLocked) 
700
	            {
701
                       /* Mac OSX returns ENOTSUP for webdav drives. We should try read lock */
702
                       if ( 0 == flock( fd, LOCK_EX | LOCK_NB ) || errno == ENOTSUP )
703
                          bLocked = ( errno != ENOTSUP ) || ( 0 == flock( fd, LOCK_SH | LOCK_NB ) || errno == ENOTSUP );
704
                    }
705
#else	/* MACOSX */
692
                    bLocked = ( F_WRLCK != aflock.l_type || -1 != fcntl( fd, F_SETLK, &aflock ) );
706
                    bLocked = ( F_WRLCK != aflock.l_type || -1 != fcntl( fd, F_SETLK, &aflock ) );
707
#endif	/* MACOSX */
693
                }
708
                }
694
709
695
                if ( !bNeedsLock || bLocked )
710
                if ( !bNeedsLock || bLocked )
Lines 756-762 Link Here
756
                /* FIXME: check if file is really locked ?  */
771
                /* FIXME: check if file is really locked ?  */
757
772
758
                /* release the file share lock on this file */
773
                /* release the file share lock on this file */
774
#ifdef MACOSX
775
                /* Mac OSX will return ENOTSUP for webdav drives. We should ignore the error */
776
                if ( 0 != flock( pHandleImpl->fd, LOCK_UN | LOCK_NB ) && errno != ENOTSUP )
777
#else	/* MACOSX */
759
                if( -1 == fcntl( pHandleImpl->fd, F_SETLK, &aflock ) )
778
                if( -1 == fcntl( pHandleImpl->fd, F_SETLK, &aflock ) )
779
#endif	/* MACOSX */
760
                {
780
                {
761
                    PERROR( "osl_closeFile", "unlock failed" );
781
                    PERROR( "osl_closeFile", "unlock failed" );
762
                }
782
                }
(-)profile.c (+5 lines)
Lines 1207-1213 Link Here
1207
			break;
1207
			break;
1208
	}
1208
	}
1209
1209
1210
#ifndef MACOSX // not MAC OSX
1210
    if ( fcntl(pFile->m_Handle, F_SETLKW, &lock) == -1 )
1211
    if ( fcntl(pFile->m_Handle, F_SETLKW, &lock) == -1 )
1212
#else
1213
    /* Mac OSX will return ENOTSUP for webdav drives so we should ignore it */
1214
    if ( fcntl(pFile->m_Handle, F_SETLKW, &lock) == -1 && errno != ENOTSUP )
1215
#endif  /* MACOSX */ 
1211
    {
1216
    {
1212
        OSL_TRACE("fcntl returned -1 (%s)\n",strerror(errno));
1217
        OSL_TRACE("fcntl returned -1 (%s)\n",strerror(errno));
1213
#ifdef TRACE_OSL_PROFILE
1218
#ifdef TRACE_OSL_PROFILE

Return to issue 83838