[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Files and Exceptions



Hi all,

  I was just trying to debug Ozone on my machine and I noticed something
disturbing: Ozone does not always close files after reading from them.  On
systems with a limited number of open files (like most of them), this is
bad.  (finalizers are not guaranteed to run in finite time.)

  Even when files are closed, they are usually not correctly enclosed in
try {} finally {} blocks.  The correct way to do this is:

	FileInputStream fin = null;
	try {
		fin = new FileInputStream("MyFile");
		// do stuff with fin
	} finally {
		if (fin != null)
			fin.close();
	}

  Here the file is always closed even if an exception is thrown.  This is
covered in more detail here:
<http://developer.java.sun.com/developer/TechTips/1998/tt0915.html> and
<http://developer.java.sun.com/developer/TechTips/2000/tt0124.html#tip1>.
This is especially important for a program like the Ozone server that
catches all exceptions and keeps running rather than shutting down.

This needs to be fixed in the following places that I found:

 core
  wizardStore
   ClusterStore.java
    readCluser()
    writeCluster()
   WizardStore.java
    startup()
    shutdown()
  Env.java
   initSetup()
   storeSetup()
 tools
  Statistics.java
   readStats()
   writeStats()
  Install.java
   resetStateFile()
   resetConfigFile()
 DxLib
  DxDiskHashMap.java
   re_use()
   close()
  DxDiskSubTable.java
   readTable()
   writeTable()

later,

\x/ill         :-}