ゴミ箱,UNDO,グラフ検証系を止めたベーシックZTの動作

リサイクルシステム,UNDOシステム,グラフ検証系を止めたZTベーシックの動作をチェックしているところだが,アプリ終了でnodl_floatのエラーが出ている.今回は「完全参照リスト管理」を搭載した状態でチェックしているところが前回と異なる点だ.参照リストは親オブジェクトが削除されても存続するという仕様になっていることがこの不良の原因と考えられる.~NODULEを修正して,ゴミ箱が未サポートのときには,増設スロットを含むすべてのスロットの下位オブジェクトを削除するようにしてこのエラーは解消したが,こんどは,CallSetCouplingPtrでCOUPLINGを削除した後,rootnodeをクリアするところで無限ループするようになってしまった.

rootnodeにはnullpointオブジェクトが入っている.このオブジェクトは地べたに置かれた根付きのオブジェクトだ.newで生成されたものではないという属性NOTAUTODELETEを持っているため削除できない.このオブジェクトのアドレスを格納しているrootnodeは昨日nodl_floatを修正して,すでに親ノードが死亡しているときには書き込みを行わないとしたため,空にできない状態になっている.ゴミ箱を使っていないときにはオブジェクトの削除=メモリからのパージを意味するから,死亡しているオブジェクトへの書き込みにはリスクがあるが,今の場合書き込むのはオブジェクトではなくリンクを格納しているアンカーなのでその場合だけは例外として処理されなくてはならない.⇒対処した.

これでrootnodeは始末できたが,こんどは_getblock_で「フリーメモリゼロ」というダンプが出るようになった.Nリングに残留オブジェクトが大量発生している.すべてfreeblockオブジェクトだ.なぜだろう?freeblockはCOUPLING:EraseFamilyTreeでfreeblock:ReleaseFreeBlockを使って完全に解放しているはずなのだが…

_getblock_では(!totalblock || !topblock)のとき,「フリーメモリゼロ」というエラーを返している.どうもまた何かメモリ管理に関する齟齬が発生しているようだ.⇒カウントの問題ではない.nodl_floatでIsAliveでないときは処理しないとしているためだ.⇒いや,違う.親ノードがIsAliveでないときは書き込みしない,ただし,対象ノードがNOTAUTODELETEであるときは,無条件で書き込むように修正した.これで「フリーメモリゼロ」も解消し,rootnodeも始末できた.

源氏物語全系譜6.1.ZELの傍系血族図 基準ノード=#51 若宮(匂宮の)でPAIRBOX::RepairCommonEndPointのエラーが出た.端点共有で始点不一致というエラーがPAIRBOX:#42220:#21900 明石の上(1)→#12444(0)と#42320:#22054 源氏宮(1)→#12988(0)で起きている.⇒これは起こり得るエラーだろう.この端点共有には3つのノード対が関係している.①明石の上,②源氏宮,③承香殿女御だが,元々は①承香殿女御,②源氏宮のようになっていた.明石の上と承香殿の始点の誤差は許容範囲内,承香殿と源氏宮の誤差も許容範囲内だが,明石の上と源氏宮では許容範囲を超えてしまう.

端点共有リストをノード対区間の大きさでソートしてやればおそらくこのようなエラーは(ある程度まで)回避できるのではないかと思われるが,必ずしも確実なものではない.許容範囲を倍にしてやればエラー自体は(ある程度)回避できるかもしれない… こちらの方が簡単だが,むしろ傷が深くなる可能性もある.基準となる始点座標を「固定」しない限りこのような変動は避けられない.

とりあえず,ソートしてみることにする.MoveSamePointではSwapBundledPairを実行しているが,この関数を「最大区間の付け替えを実施」するだけでなく,ソートまで実行するようにすればよい.この関数はPAIRBOX::MoveSamePoint,PAIRLIST::RepairPairBox,NAMEBOX::makePairBoxで使われている.⇒対処した.⇒最終的には上の3つのノード対の端点共有は崩れて分解してしまう.

▲同上サンプルの法定親族図を#74 薫でソートしてMARGBOX:CheckMarchainで停止した.結婚チェーン不整合が起きている.NAMEBOX::BuildMarChain→ CheckMarchainで不良が検出されている.NAMEBOX:#11679 八宮(0)の結婚チェーンで,要素は2つ.MARGBOX:#10223:#11679 八宮(0)+→#11951 大姫君(0)とMARGBOX:#8623:#11679 八宮(0)+#13583 浮舟の母(0)→ だ.前者は可視,後者は不可視でBTWの右手結婚枠.

「右枝ノードが結婚枠を親参照していない」というエラーが起きている.障害ノードはMARGBOX:#8623でYRにはNAMEBOX:#21950 浮舟(2)が入っている.浮舟(2)はこの結婚枠の最初の子どもなので当然結婚枠を親参照しているべきところだが… どこかで外れてしまっているのだろうか?⇒どうも最初から失敗しているようだ.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA