Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
bgColor#ccccff
public boolean sendReply(Socket socket, String pageName) { // No synchronization
  Page targetPage = getPage(pageName); 

  if(targetPage == null)
    return FAILURE;

  return sendPage(socket, targetPage);
}

private synchronized Page getPage(String pageName) { // Requires synchronization
  Page targetPage = null;

  for(Page p : pageBuff) {
    if(p.getName().equals(pageName)) {
      targetPage = p;
    }
  }
  return targetPage;
}

public boolean sendPage(Socket socket, Page page){
  try{
    // Get the output stream to write the Page to
    ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());

    // Send the Page to the client
    out.writeObject(page);

    out.flush();}catch(IOException io){
    out.close();
 // If recovery is not possible return FAILURE
     return SUCCESSFAILURE;    
  }catch(IOException io) finally {
     // Handle exception    
  }out.flush();
    out.close();
  }  
  return FAILURESUCCESS;
}

Risk Assessment

If synchronized methods and statements contain network transactional logic, temporary or permanent deadlocks may result.

...