Bug 49685 - Unsafe synchronization in class ManagedBean
Unsafe synchronization in class ManagedBean
Status: NEW
Product: Tomcat Modules
Classification: Unclassified
Component: Tomcat Lite
unspecified
PC Windows XP
: P2 normal (vote)
: ---
Assigned To: Tomcat Developers Mailing List
:
Depends on:
Blocks:
  Show dependency tree
 
Reported: 2010-08-02 01:42 UTC by Wendy
Modified: 2010-08-04 12:43 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Wendy 2010-08-02 01:42:27 UTC
Class ManagedBean has eneffectiv code as follow:
 
public void addNotification(NotificationInfo notification) {

        synchronized (notifications) {
            NotificationInfo results[] =
                new NotificationInfo[notifications.length + 1];
            System.arraycopy(notifications, 0, results, 0,
                             notifications.length);
            results[notifications.length] = notification;
            notifications = results;
            this.info = null;
        }

    }

In this case, the object of notifications has been changed in the synchronized block. this may cause two threads synchronizing on different objects. If thread A and B access this method concurrently, and thread A execute the code  " notifications = results; " earlier and then finished while thread B is still not finished. At the same time, Thread C access this method, then C will hold the different lock instance as Thread B. This is dangerous.