ПРИМЕЧАНИЕ. Я полностью переписал этот вопрос, чтобы учесть новую информацию. Пожалуйста, перечитайте, если вы уже прошли через это.
Я получаю сообщения об ошибках при использовании 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>
Просто поместите все три файла в каталог в ColdFusion 10 и загрузите 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. "
Я также заметил, что в ошибке для потока в пользовательском теге он не содержит имя приложения. В то время как запись журнала для потока на странице делает. Обратите внимание, что строка ошибки имеет просто ,,
для столбца Application журнала, а успешный поток имеет "CFTHREADCUSTOMTAGTEST"
.
Если я изменяю 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>
<cfthread action="join" name="ThreadTest" timeout="10" />
<cfdump var="#cfthread#">
</cfif>
И чтобы убедиться, что нигде нет странных настроек, вот моя сводка настроек локальной среды разработки.
Таким образом, кажется, что если я просто брошу поток и не буду ждать его завершения, то поток, похоже, ищет что-то на родительской странице, которого больше нет в памяти. По крайней мере, это мое совершенно необоснованное предположение :).
Я также сообщил об ошибке в Adobe. номер ошибки 3218452.