finally { buffer.readUnlock(); }
	private void save()	{		OutputStream out = null;		try		{			String[] args = { MiscUtilities.getFileName(path) };			setStatus(jEdit.getProperty("view.status.save",args));			// the entire save operation can be aborted...			setAbortable(true);			try			{				out = vfs._createOutputStream(view,buffer,path);				if(out == null)					return;				if(path.endsWith(".gz"))					out = new GZIPOutputStream(out);				write(buffer,out);				// We only save markers to VFS's that support deletion.				// Otherwise, we will accumilate stale marks files.				if(vfs.canDelete() && buffer.getMarkerCount() != 0)				{					setStatus(jEdit.getProperty("view.status.save-markers",args));					out = vfs._createOutputStream(view,buffer,markersPath);					if(out != null)						writeMarkers(buffer,out);				}				else					vfs.delete(markersPath);			}			catch(BadLocationException bl)			{				Log.log(Log.ERROR,this,bl);			}			catch(IOException io)			{				Log.log(Log.ERROR,this,io);				args[0] = io.toString();				VFSManager.error(view,"ioerror",args);			}		}		catch(WorkThread.Abort a)		{			if(out != null)			{				try				{					out.close();				}				catch(IOException io)				{				}			}		}		try		{			vfs._saveComplete(buffer);		}		catch(IOException io)		{		}		catch(WorkThread.Abort a)		{		}	}