Skip to content

Commit b6714ee

Browse files
committed
Fix double resolver context initialization bug.
1 parent 4ae6d4e commit b6714ee

3 files changed

Lines changed: 56 additions & 21 deletions

File tree

src/CachedResolver/resolver.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -298,10 +298,20 @@ CachedResolver::_CreateDefaultContextForAsset(
298298
if (!TfPathExists(resolvedPath)){
299299
return ArResolverContext(_fallbackContext);
300300
}
301-
std::string resolvedPathStr = resolvedPath.GetPathString();
302-
if(this->_GetCurrentContextObject<CachedResolverContext>() != nullptr){
303-
TF_DEBUG(CACHEDRESOLVER_RESOLVER_CONTEXT).Msg("Resolver::_CreateDefaultContextForAsset('%s') - Skipping on same stage\n", assetPath.c_str());
304-
return ArResolverContext(_fallbackContext);
301+
if (this->_GetCurrentContextPtr() != nullptr)
302+
{
303+
if (TfDebug::IsEnabled(CACHEDRESOLVER_RESOLVER_CONTEXT))
304+
{
305+
if (this->_GetCurrentContextPtr() == &_fallbackContext)
306+
{
307+
TF_DEBUG(CACHEDRESOLVER_RESOLVER_CONTEXT).Msg("Resolver::_CreateDefaultContextForAsset('%s') - Reusing already bound default context on same stage\n", assetPath.c_str());
308+
}
309+
else
310+
{
311+
TF_DEBUG(CACHEDRESOLVER_RESOLVER_CONTEXT).Msg("Resolver::_CreateDefaultContextForAsset('%s') - Reusing already bound context CachedResolverContext('%s') on same stage\n", assetPath.c_str(), this->_GetCurrentContextPtr()->GetMappingFilePath().c_str());
312+
}
313+
}
314+
return ArResolverContext(*this->_GetCurrentContextPtr());
305315
}
306316
auto map_iter = _sharedContexts.find(resolvedPath);
307317
if(map_iter != _sharedContexts.end()){
@@ -317,9 +327,10 @@ CachedResolver::_CreateDefaultContextForAsset(
317327
}
318328
// Create new context
319329
TF_DEBUG(CACHEDRESOLVER_RESOLVER_CONTEXT).Msg("Resolver::_CreateDefaultContextForAsset('%s') - Constructing new context\n", assetPath.c_str());
320-
struct CachedResolverContextRecord record;
321-
record.timestamp = this->_GetModificationTimestamp(assetPath, resolvedPath);
322-
record.ctx = CachedResolverContext(resolvedPath);
330+
struct CachedResolverContextRecord record
331+
{
332+
this->_GetModificationTimestamp(assetPath, resolvedPath), CachedResolverContext(resolvedPath)
333+
};
323334
_sharedContexts.insert(std::pair<std::string, CachedResolverContextRecord>(resolvedPath, record));
324335
return ArResolverContext(record.ctx);
325336
}

src/FileResolver/resolver.cpp

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -214,10 +214,20 @@ FileResolver::_CreateDefaultContextForAsset(
214214
if (!TfPathExists(resolvedPath)){
215215
return ArResolverContext(_fallbackContext);
216216
}
217-
std::string resolvedPathStr = resolvedPath.GetPathString();
218-
if(this->_GetCurrentContextObject<FileResolverContext>() != nullptr){
219-
TF_DEBUG(FILERESOLVER_RESOLVER_CONTEXT).Msg("Resolver::_CreateDefaultContextForAsset('%s') - Skipping on same stage\n", assetPath.c_str());
220-
return ArResolverContext(_fallbackContext);
217+
if (this->_GetCurrentContextPtr() != nullptr)
218+
{
219+
if (TfDebug::IsEnabled(FILERESOLVER_RESOLVER_CONTEXT))
220+
{
221+
if (this->_GetCurrentContextPtr() == &_fallbackContext)
222+
{
223+
TF_DEBUG(FILERESOLVER_RESOLVER_CONTEXT).Msg("Resolver::_CreateDefaultContextForAsset('%s') - Reusing already bound default context on same stage\n", assetPath.c_str());
224+
}
225+
else
226+
{
227+
TF_DEBUG(FILERESOLVER_RESOLVER_CONTEXT).Msg("Resolver::_CreateDefaultContextForAsset('%s') - Reusing already bound context CachedResolverContext('%s') on same stage\n", assetPath.c_str(), this->_GetCurrentContextPtr()->GetMappingFilePath().c_str());
228+
}
229+
}
230+
return ArResolverContext(*this->_GetCurrentContextPtr());
221231
}
222232
auto map_iter = _sharedContexts.find(resolvedPath);
223233
if(map_iter != _sharedContexts.end()){
@@ -233,10 +243,12 @@ FileResolver::_CreateDefaultContextForAsset(
233243
}
234244
// Create new context
235245
TF_DEBUG(FILERESOLVER_RESOLVER_CONTEXT).Msg("Resolver::_CreateDefaultContextForAsset('%s') - Constructing new context\n", assetPath.c_str());
246+
std::string resolvedPathStr = resolvedPath.GetPathString();
236247
std::string assetDir = TfGetPathName(TfAbsPath(resolvedPathStr));
237-
struct FileResolverContextRecord record;
238-
record.timestamp = this->_GetModificationTimestamp(assetPath, resolvedPath);
239-
record.ctx = FileResolverContext(resolvedPath, std::vector<std::string>(1, assetDir));
248+
struct FileResolverContextRecord record
249+
{
250+
this->_GetModificationTimestamp(assetPath, resolvedPath), FileResolverContext(resolvedPath, std::vector<std::string>(1, assetDir))
251+
};
240252
_sharedContexts.insert(std::pair<std::string, FileResolverContextRecord>(resolvedPath, record));
241253
return ArResolverContext(record.ctx);
242254
}

src/PythonResolver/resolver.cpp

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,20 @@ PythonResolver::_CreateDefaultContextForAsset(
134134
if (!TfPathExists(resolvedPath)){
135135
return ArResolverContext(_fallbackContext);
136136
}
137-
std::string resolvedPathStr = resolvedPath.GetPathString();
138-
if(this->_GetCurrentContextObject<PythonResolverContext>() != nullptr){
139-
TF_DEBUG(PYTHONRESOLVER_RESOLVER_CONTEXT).Msg("Resolver::_CreateDefaultContextForAsset('%s') - Skipping on same stage\n", assetPath.c_str());
140-
return ArResolverContext(_fallbackContext);
137+
if (this->_GetCurrentContextPtr() != nullptr)
138+
{
139+
if (TfDebug::IsEnabled(PYTHONRESOLVER_RESOLVER_CONTEXT))
140+
{
141+
if (this->_GetCurrentContextPtr() == &_fallbackContext)
142+
{
143+
TF_DEBUG(PYTHONRESOLVER_RESOLVER_CONTEXT).Msg("Resolver::_CreateDefaultContextForAsset('%s') - Reusing already bound default context on same stage\n", assetPath.c_str());
144+
}
145+
else
146+
{
147+
TF_DEBUG(PYTHONRESOLVER_RESOLVER_CONTEXT).Msg("Resolver::_CreateDefaultContextForAsset('%s') - Reusing already bound context CachedResolverContext('%s') on same stage\n", assetPath.c_str(), this->_GetCurrentContextPtr()->GetMappingFilePath().c_str());
148+
}
149+
}
150+
return ArResolverContext(*this->_GetCurrentContextPtr());
141151
}
142152
auto map_iter = _sharedContexts.find(resolvedPath);
143153
if(map_iter != _sharedContexts.end()){
@@ -153,10 +163,12 @@ PythonResolver::_CreateDefaultContextForAsset(
153163
}
154164
// Create new context
155165
TF_DEBUG(PYTHONRESOLVER_RESOLVER_CONTEXT).Msg("Resolver::_CreateDefaultContextForAsset('%s') - Constructing new context\n", assetPath.c_str());
166+
std::string resolvedPathStr = resolvedPath.GetPathString();
156167
std::string assetDir = TfGetPathName(TfAbsPath(resolvedPathStr));
157-
struct PythonResolverContextRecord record;
158-
record.timestamp = this->_GetModificationTimestamp(assetPath, resolvedPath);
159-
record.ctx = PythonResolverContext(resolvedPath);
168+
struct PythonResolverContextRecord record
169+
{
170+
this->_GetModificationTimestamp(assetPath, resolvedPath), PythonResolverContext(resolvedPath)
171+
};
160172
_sharedContexts.insert(std::pair<std::string, PythonResolverContextRecord>(resolvedPath, record));
161173
return ArResolverContext(record.ctx);
162174
}

0 commit comments

Comments
 (0)