if (!(captive_file_object=FileHandle_lookup(file)))
return -1;
+ /* Do not unlock 'libcaptive' between seek() and read()! */
G_LOCK(libcaptive);
errvfsresult=captive_file_seek(captive_file_object,GNOME_VFS_SEEK_START,offset);
- G_UNLOCK(libcaptive);
- if (errvfsresult!=GNOME_VFS_OK)
+ if (errvfsresult!=GNOME_VFS_OK) {
+ G_UNLOCK(libcaptive);
return -1;
+ }
- G_LOCK(libcaptive);
errvfsresult=captive_file_read(captive_file_object,buf,count,&bytes_read);
G_UNLOCK(libcaptive);
if (errvfsresult!=GNOME_VFS_OK)
if (!(captive_file_object=FileHandle_lookup(file)))
return -1;
+ /* Do not unlock 'libcaptive' between seek() and write()! */
G_LOCK(libcaptive);
errvfsresult=captive_file_seek(captive_file_object,GNOME_VFS_SEEK_START,offset);
- G_UNLOCK(libcaptive);
- if (errvfsresult!=GNOME_VFS_OK)
+ if (errvfsresult!=GNOME_VFS_OK) {
+ G_UNLOCK(libcaptive);
return -1;
+ }
- G_LOCK(libcaptive);
errvfsresult=captive_file_write(captive_file_object,buf,count,&bytes_written);
G_UNLOCK(libcaptive);
if (errvfsresult!=GNOME_VFS_OK)