/**
* Return the user's home directory.
*/
function drush_server_home() {
// Cannot use $_SERVER superglobal since that's empty during UnitUnishTestCase
// getenv('HOME') isn't set on Windows and generates a Notice.
$home = getenv('HOME');
if (!empty($home)) {
// home should never end with a trailing slash.
$home = rtrim($home, '/');
}
elseif (!empty($_SERVER['HOMEDRIVE']) && !empty($_SERVER['HOMEPATH'])) {
// home on windows
$home = $_SERVER['HOMEDRIVE'] . $_SERVER['HOMEPATH'];
// If HOMEPATH is a root directory the path can end with a slash. Make sure
// that doesn't happen.
$home = rtrim($home, '\\/');
}
return empty($home) ? NULL : $home;
}
正如您所看到的,BodySource在另一个线程中得到更新,并且还更新了BodyRefiner。 Body Refiner包含一个从主循环调用的GetBodies()方法。 CopyBodies()和GetBodies()中的调试日志不会记录相同的结果。当在两种方法中使用lock语句时,怎么会发生这样的事情呢?
答案 0 :(得分:0)
CopyBodies()会在记录之前更改copiedBodies成员,因此如果在CopyBodies()之前调用GetBodies(),您将获得不同的日志,因为GetBodies()将记录旧成员,而CopyBodies()将记录新成员。
答案 1 :(得分:0)
我刚刚制作了一个body数组的深层副本,所以每当我编辑它时,我的copiedBodies数组也会改变。由于我没有锁定我的UpdateBodies()方法,我遇到了这些同步错误。