다운로드
소프트웨어 개발
계정
다운로드
소프트웨어 개발
Login
Forgot Account/Password
계정 만들기
언어
도움
언어
도움
×
Login
Login Name
Password
×
Forgot Account/Password
Translation Status of 한국말
Category:
Software
People
PersonalForge
Magazine
Wiki
검색
OSDN
>
브라 우즈 소프트웨어
>
Internet
>
WWW/HTTP
>
Dynamic Content
>
Message Boards
>
BathyScaphe
>
Ticket List/Search
>
Ticket #9795
BathyScaphe
Description
Project Summary
Developer Dashboard
웹 페이지
Developers
Image Gallery
List of RSS Feeds
Activity
Statistics
History
다운로드
List of Releases
Stats
소스 코드
Code Repository list
Subversion
View Repository
티켓
Ticket List
Milestone List
Type List
Component List
List of frequently used tickets/RSS
Submit New Ticket
News
Ticket #9795
Ticket List
Submit New Ticket
RSS
【Starlight Breaker】既得スレッドの更新時に固まる
오픈 날짜:
2007-01-12 21:48
마지막 업데이트:
2009-08-16 21:32
monitor
ON
OFF
Reporter:
masakih
소유자:
(None)
Type:
Bugs
Status:
Closed
Component:
(None)
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Out of Date
File:
1
Details
既得スレッドを更新する時、レインボーカーソルになり、完全に動作不能にな
る。
デバッグモードで2回遭遇。
2回ともメインスレッド上の同期ロック待ちと
別スレッド上(CMRThreadUpdatedHeaderTask)での -
[NSTextStorage endEditing] の待ち。
CMRThreadUpdatedHeaderTask と メインスレッド上でのNSTextView
の更新でデッドロックが掛かっているようである。
Ticket History (3/7 Histories)
Show older Histories
2007-01-14 17:19
Updated by:
masakih
Priority
Update from
5 - Medium
to
7
2007-01-22 02:18
Updated by:
masakih
File
1708: bug-9795-bt.txt
is attached
댓글 올리기
Logged In: YES
user_id=2881
同様の状態に陥ったのでとりあえずバックトレースをした。
関係するのはおそらく Thread 1 と Thread 2。
2007-01-22 03:24
Updated by:
masakih
댓글 올리기
Logged In: YES
user_id=2881
NSTextStorage に(おそらく隠された)インスタンス変数の
NSViewHierarchyLock のインスタンスが存在する。
NSViewHierarchyLockは最下部で示す通り Read-Write Lock を実現するク
ラスである。
-[NSTextStorage beginEditing] は NSViewHierarchyLock を使い、
Write Lock を取得し、
-[NSTextStorage endEditing] でそれを返す。
(もちろんその他の編集でもそれを取得する。)
また、NSLayoutManager のインスタンス変数 _extraData は、
NSExtraLMData のインスタンスで それはインスタンス変数として、
NSRecursiveLock を持つ。
NSLayoutManager はほとんどの処理でこのロックを取得する。
Thread 1での処理は
1-a, NSLayoutManager が _extraData のロックを取得。
1-b, NSTextStorage が NSViewHierarchyLock の Read Lock を取
得。
Thread 2での処理は
2-a, NSTextStorage が NSViewHierarchyLock の Write Lock を取
得。
2-b, NSLayoutManager が _extraData のロックを取得。
となっている。
つまり、
2-a -> 1-a の順に処理が行われた場合、デッドロックが生じる。
これは、mutable なオブジェクトであるNSTextStorageを非同期に扱う限り
逃れられないものと考えられる。
# NSViewHierarchyLock のdescription を示す。
# NSViewHierarchyLock(0x563efa0) {
# readers: 1
# waiting readers: 0
# writers: 0
# waiting writers: 0
# thread id 1
# thread_entry (0x563eda0) {
# read recursion: 1
# write recursion: 0
# topOfStack: 1
# stack: 0x563e750 [ ?]
# }
# }
2007-01-24 22:03
Updated by:
masakih
댓글 올리기
Logged In: YES
user_id=2881
application/source/thread/CMRThreadLayout.m 内。
worker = [[CMXWorkerContext alloc]
initWithUsingDrawingThread : YES];
を
worker = [[CMXWorkerContext alloc]
initWithUsingDrawingThread : NO];
に変更したときの排他処理をみる。
結果。
排他処理は全く変わらない。
また、デバッグ一回目に全く同様のデッドロックが発生した。(これは単なる偶然
でしょう)
2007-01-24 22:08
Updated by:
masakih
댓글 올리기
Logged In: YES
user_id=2881
完全ではないが、デッドロックが掛かるであろう部分を探してみた。
今のところ CMRThreadUpdatedHeaderTask 以外に発見されない。
この処理を
-[NSObject
performSelectorOnMainThread:withObject:waitUntilDone:];
でMainThread上でやらせるようにして様子見中。
2007-02-13 04:39
Updated by:
tsawada2
Priority
Update from
7
to
5 - Medium
댓글 올리기
Logged In: YES
user_id=5983
様子見中ということで、少し重要度を落としておきます。
BathyScaphe~CocoMonar 時代からレイアウト部分の
コードは何度読んでも構造がよくわからん… orz
2009-08-16 21:32
Updated by:
tsawada2
Resolution
Update from
None
to
Out of Date
Status
Update from
Open
to
Closed
Ticket Close date
is changed to
2009-08-16 21:32
Attachment File List (
1
)
Attachment File List
bug-9795-bt.txt
(3KB)
レインボーカーソル発生時の各スレッドのバックトレース
Edit
Please login to add comment to this ticket »
Login
る。
デバッグモードで2回遭遇。
2回ともメインスレッド上の同期ロック待ちと
別スレッド上(CMRThreadUpdatedHeaderTask)での -
[NSTextStorage endEditing] の待ち。
CMRThreadUpdatedHeaderTask と メインスレッド上でのNSTextView
の更新でデッドロックが掛かっているようである。