public boolean asDecided(List<String> plist) 
	    throws IOException {
	    String inputLine, r_tid1, r_tid2;
	    String[] tokens = null;

	    try {
		inputLine = in.readLine();

		/* peer closed */
		if (inputLine == null) { 
		    System.err.println ("[peer closed] should get decision from TM");
		    return false;
		}

		/* System.out.println (inputLine); */
		tokens = inputLine.split(Setting.theSplit);

		if (tokens == null || tokens.length != 2) 
		    return false;

		r_tid1 = plist.get(0);
		r_tid2 = tokens[0];

		System.out.println("former tid " + r_tid1 
			+ " current tid " + r_tid2);

		/* check tid to avoid re-ordering */
		if (! r_tid1.trim().equals(r_tid2.trim()))
		    return false;

		if (tokens[1].equals(Setting.COMMIT)) {
		    LOG2PC.info("COMMIT: " + plist);
		    dbwk.commit();

		} else if (tokens[1].equals(Setting.ABORT)) {
		    LOG2PC.info("ABORT: " + plist);
		    dbwk.abort();

		} else {
		    System.err.println ("unknown decision from TM");
		    return false;
		}

	    } catch (SocketTimeoutException e) {
		System.err.println ("socket time out");
		return false;
	    }

	    return true;
	}