~smaioli/azureus/ubuntu-experimental

« back to all changes in this revision

Viewing changes to org/gudy/azureus2/core3/download/impl/DownloadManagerStateImpl.java

MergedĀ VuzeĀ 4.0.0.4.

Show diffs side-by-side

added added

removed removed

Lines of Context:
132
132
        private CopyOnWriteMap listeners_read_map_cow  = new CopyOnWriteMap();
133
133
        private CopyOnWriteMap listeners_write_map_cow = new CopyOnWriteMap();
134
134
        
135
 
        private List            will_be_read_list       = new ArrayList();
136
135
        
137
136
        private Map                     parameters;
138
137
        private Map                     attributes;
143
142
        
144
143
        private int supressWrites = 0;
145
144
 
 
145
        private static ThreadLocal              tls_wbr = 
 
146
                new ThreadLocal()
 
147
                {
 
148
                        public Object
 
149
                        initialValue()
 
150
                        {
 
151
                                return( new ArrayList(1));
 
152
                        }
 
153
                };
146
154
 
147
155
        private static DownloadManagerState
148
156
        getDownloadState(
2196
2204
                        // avoid potential recursion will a will-be-read causing a write that then
2197
2205
                        // causes a further will-be-read...
2198
2206
                
2199
 
                boolean do_it = false;
2200
 
        
2201
 
                try{
2202
 
                        
 
2207
                List    will_be_read_list = (List)tls_wbr.get();
 
2208
 
 
2209
                if ( !will_be_read_list.contains( attribute_name )){
 
2210
                                                        
 
2211
                        will_be_read_list.add( attribute_name );
 
2212
 
2203
2213
                        try{
2204
 
                                this_mon.enter();
2205
 
                                
2206
 
                                if ( !will_be_read_list.contains( attribute_name )){
2207
 
                                        
2208
 
                                        do_it   = true;
2209
 
                                        
2210
 
                                        will_be_read_list.add( attribute_name );
2211
 
                                }
2212
 
                        }finally{
2213
 
                                
2214
 
                                this_mon.exit();
2215
 
                                
2216
 
                        }
2217
 
                
2218
 
                        if ( do_it ){
2219
2214
                                
2220
2215
                                List    listeners_ref = listeners_cow.getList();
2221
2216
 
2256
2251
                                                catch (Throwable t) {Debug.printStackTrace(t);}
2257
2252
                                        }
2258
2253
                                }
2259
 
                                
2260
 
                        }
2261
 
                }finally{
 
2254
                        }finally{
2262
2255
                        
2263
 
                        if ( do_it ){
2264
 
                                
2265
 
                                try{
2266
 
                                        this_mon.enter();
2267
 
                                        
2268
 
                                        will_be_read_list.remove( attribute_name );
2269
 
                                        
2270
 
                                }finally{
2271
 
                                        
2272
 
                                        this_mon.exit();
2273
 
                                }
 
2256
                                will_be_read_list.remove( attribute_name );
2274
2257
                        }
2275
2258
                }
2276
2259
        }