注:新しい情報を考慮して、この質問を完全に書き直しました。すでにこれを読んだことがある場合は、もう一度お読みください。
cfthread
ColdFusion 10のカスタムタグ内からを使用するとエラーが発生します。アプリケーションログに、次のエントリが表示されます。
Variable _cffunccfthread_cfThreadTag2ecfm16902001291 is undefined.
エラーとして返される関数の名前は、_cffunccfthread_cf[Page Name Calling the CFThreadTag]
リクエストごとに変わらない番号になります。次のコードで毎回これを複製できます。
Application.cfc:
component
{
this.name = "CFThreadCustomTagTest";
}
ThePage.cfm:
<cfthread action="run" name="ThreadTestInPage">
<cflog log="Application" text="The thread in the page successfully ran" type="information" />
</cfthread>
<cf_ThreadTag />
ThreadTag.cfm:
<cfif thisTag.ExecutionMode EQ "start">
<cfthread action="run" name="ThreadTest">
<cflog log="Application" text="The thread within the tag successfully ran" type="information" />
</cfthread>
</cfif>
3つのファイルすべてをColdFusion10のディレクトリにドロップし、ThePage.cfmをロードするだけです。アプリケーションログに次のエントリがあります。
"Severity","ThreadID","Date","Time","Application","Message"
"Information","ajp-bio-8012-exec-1","06/19/12","07:18:11",,"C:\ColdFusion10\cfusion\logs\application.log initialized"
"Information","cfthread-11","06/19/12","07:18:15","CFTHREADCUSTOMTAGTEST","The thread in the page successfully ran"
"Error","cfthread-9","06/19/12","07:18:15",,"THREADTEST: Variable _cffunccfthread_cfThreadTag2ecfm16902001291 is undefined. "
また、カスタムタグ内のスレッドのエラーで、アプリケーション名が含まれていないことにも気づきました。ページ内のスレッドのログエントリはそうですが。エラー行,,
にはログのアプリケーション列が含まれているだけで、成功したスレッドにはが含まれていることに注意してください"CFTHREADCUSTOMTAGTEST"
。
ThreadTag.cfm
タグ内のスレッドが処理を終了するのを待つように変更すると、すべてが正常に機能し、期待どおりにログに2つのエントリが取得されます。
<cfif thisTag.ExecutionMode EQ "start">
<cfthread action="run" name="ThreadTest">
<cflog log="Application" text="The thread within the tag successfully ran" type="information" />
</cfthread>
<cfthread action="join" name="ThreadTest" timeout="10" />
<cfdump var="#cfthread#">
</cfif>
そして、どこにもファンキーな設定がないことを確認するために、ここに私のローカル開発環境の設定の概要があります。
したがって、スレッドをスローして終了するのを待たない場合、スレッドは親ページからメモリに存在しないものを探しているように見えます。少なくともそれは私の完全に根拠のない推測です:)。
また、Adobeにバグを報告しました。バグ番号3218452。