チェンジセット 175

差分発生行の前後
無視リスト:
コミット日時:
2007/12/22 15:43:48 (1 年前)
コミッタ:
yossy
ログメッセージ:

Fixed removeChild issue.

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as2/Thread/src/org/libspark/thread/Thread.as

    r149 r175  
    2525                _parent = null; 
    2626                _children = []; 
     27                _willRemove = []; 
    2728                _state = STATE_STANDINGBY; 
    2829                _executeHandler = nullHandler; 
     
    3435        private var _parent:Thread; 
    3536        private var _children:Array; 
     37        private var _willRemove:Array; 
    3638        private var _state:Number; 
    3739        private var _executeHandler:Function; 
     
    9092        private function removeChild(child:Thread):Thread 
    9193        { 
    92                 var children:Array = _children; 
    93                 var l:Number = children.length; 
    94                 for (var i:Number = 0; i < l; ++i) { 
    95                         if (children[i] == child) { 
    96                                 children.splice(i, 1); 
    97                                 return child; 
    98                         } 
    99                 } 
    100                  
    101                 return null; 
     94                _willRemove.push(child); 
     95                 
     96                return child; 
    10297        } 
    10398         
     
    217212                var children:Array = _children; 
    218213                var l:Number = children.length; 
     214                 
     215                var willRemove:Array = _willRemove; 
     216                if (willRemove.length > 0) { 
     217                        var wl:Number = willRemove.length; 
     218                        for (var wi:Number = 0; wi < wl; ++wi) { 
     219                                var index:Number = children.indexOf(willRemove[wi]); 
     220                                if (index != -1) { 
     221                                        children.splice(index, 1); 
     222                                } 
     223                        } 
     224                        willRemove.length = 0; 
     225                        l = children.length; 
     226                } 
     227                 
    219228                for (var i:Number = 0; i < l; ++i) { 
    220229                        try { 
  • as3/Thread/src/org/libspark/thread/Thread.as

    r151 r175  
    2424                        _parent = null; 
    2525                        _children = []; 
     26                        _willRemove = []; 
    2627                        _state = STATE_STANDINGBY; 
    2728                        _executeHandler = nullHandler; 
     
    3334                internal var _parent:Thread; 
    3435                internal var _children:Array; 
     36                private var _willRemove:Array; 
    3537                private var _state:uint; 
    3638                internal var _executeHandler:Function; 
     
    8991                internal function removeChild(child:Thread):Thread 
    9092                { 
    91                         var children:Array = _children; 
    92                         var l:uint = children.length; 
    93                         for (var i:uint = 0; i < l; ++i) { 
    94                                 if (children[i] == child) { 
    95                                         children.splice(i, 1); 
    96                                         return child; 
    97                                 } 
    98                         } 
    99                          
    100                         return null; 
     93                        _willRemove.push(child); 
     94                         
     95                        return child; 
    10196                } 
    10297                 
     
    216211                        var children:Array = _children; 
    217212                        var l:uint = children.length; 
     213                         
     214                        var willRemove:Array = _willRemove; 
     215                        if (willRemove.length > 0) { 
     216                                for each (var c:Thread in willRemove) { 
     217                                        var index:uint = children.indexOf(c); 
     218                                        if (index != -1) { 
     219                                                children.splice(index, 1); 
     220                                        } 
     221                                } 
     222                                willRemove.length = 0; 
     223                                l = children.length; 
     224                        } 
     225                         
    218226                        for (var i:uint = 0; i < l; ++i) { 
    219227                                try { 
     
    221229                                } 
    222230                                catch (e:Error) { 
    223                                         --i; 
    224                                         --l; 
    225231                                        handleError(e); 
    226232                                }