i can haz pantz?
You sure can. This change set restores pants (and the rest of the default appearance) in grid mode. The root issue had to do with serializing multi-faced textures to the grid server. This also restores the lookup path through the avatar factory module, as that seems the reasonable place to have it live. Some clean up patches are coming later as well, plus testing on standalone, but this should be in a good kicking around state for grid users.0.6.0-stable
parent
4b622ec881
commit
9808f39b6f
|
@ -661,9 +661,7 @@ namespace OpenSim.Data.MySQL
|
||||||
AvatarAppearance appearance = null;
|
AvatarAppearance appearance = null;
|
||||||
if (!m_appearanceMapper.TryGetValue(user.UUID, out appearance))
|
if (!m_appearanceMapper.TryGetValue(user.UUID, out appearance))
|
||||||
{
|
{
|
||||||
appearance = new AvatarAppearance();
|
appearance = null;
|
||||||
appearance.Owner = user;
|
|
||||||
UpdateUserAppearance(user, appearance);
|
|
||||||
}
|
}
|
||||||
return appearance;
|
return appearance;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,15 +60,12 @@ namespace OpenSim.Data
|
||||||
public abstract void Initialise(string connect);
|
public abstract void Initialise(string connect);
|
||||||
public abstract List<AvatarPickerAvatar> GeneratePickerResults(LLUUID queryID, string query);
|
public abstract List<AvatarPickerAvatar> GeneratePickerResults(LLUUID queryID, string query);
|
||||||
public AvatarAppearance GetUserAppearance(LLUUID user) {
|
public AvatarAppearance GetUserAppearance(LLUUID user) {
|
||||||
AvatarAppearance aa;
|
AvatarAppearance aa = null;
|
||||||
try {
|
try {
|
||||||
aa = aplist[user];
|
aa = aplist[user];
|
||||||
m_log.Info("[APPEARANCE] Found appearance for " + user.ToString() + aa.ToString());
|
m_log.Info("[APPEARANCE] Found appearance for " + user.ToString() + aa.ToString());
|
||||||
} catch (System.Collections.Generic.KeyNotFoundException e) {
|
} catch (System.Collections.Generic.KeyNotFoundException e) {
|
||||||
aplist[user] = new AvatarAppearance();
|
m_log.Info("[APPEARANCE] No appearance found for " + user.ToString());
|
||||||
aplist[user].Owner = user;
|
|
||||||
aa = aplist[user];
|
|
||||||
m_log.Info("[APPEARANCE] Setting up default appearance for " + user.ToString() + aa.ToString());
|
|
||||||
}
|
}
|
||||||
return aa;
|
return aa;
|
||||||
}
|
}
|
||||||
|
|
|
@ -611,7 +611,7 @@ namespace OpenSim.Framework.Communications
|
||||||
m_log.InfoFormat("[USERSTORAGE]: Unable to find user appearance {0} via {1} ({2})", user.ToString(), plugin.Key, e.ToString());
|
m_log.InfoFormat("[USERSTORAGE]: Unable to find user appearance {0} via {1} ({2})", user.ToString(), plugin.Key, e.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new AvatarAppearance();
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance)
|
public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance)
|
||||||
|
|
|
@ -256,7 +256,13 @@ namespace OpenSim.Grid.UserServer
|
||||||
if (requestData.Contains("owner"))
|
if (requestData.Contains("owner"))
|
||||||
{
|
{
|
||||||
appearance = GetUserAppearance(new LLUUID((string)requestData["owner"]));
|
appearance = GetUserAppearance(new LLUUID((string)requestData["owner"]));
|
||||||
responseData = appearance.ToHashTable();
|
if (appearance == null) {
|
||||||
|
responseData = new Hashtable();
|
||||||
|
responseData["error_type"] = "no appearance";
|
||||||
|
responseData["error_desc"] = "There was no appearance found for this avatar";
|
||||||
|
} else {
|
||||||
|
responseData = appearance.ToHashTable();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1780,28 +1780,27 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
protected virtual ScenePresence CreateAndAddScenePresence(IClientAPI client, bool child)
|
protected virtual ScenePresence CreateAndAddScenePresence(IClientAPI client, bool child)
|
||||||
{
|
{
|
||||||
AvatarAppearance appearance = CommsManager.UserService.GetUserAppearance(client.AgentId);
|
|
||||||
|
AvatarAppearance appearance = null;
|
||||||
|
GetAvatarAppearance(client, out appearance);
|
||||||
|
|
||||||
ScenePresence avatar = m_innerScene.CreateAndAddScenePresence(client, child, appearance);
|
ScenePresence avatar = m_innerScene.CreateAndAddScenePresence(client, child, appearance);
|
||||||
|
|
||||||
return avatar;
|
return avatar;
|
||||||
}
|
}
|
||||||
|
|
||||||
// protected void GetAvatarAppearance(IClientAPI client, out AvatarAppearance appearance)
|
protected void GetAvatarAppearance(IClientAPI client, out AvatarAppearance appearance)
|
||||||
// {
|
{
|
||||||
// appearance = CommsManager.UserService.GetUserAppearance(client.AgentId);
|
appearance = CommsManager.UserService.GetUserAppearance(client.AgentId);
|
||||||
|
|
||||||
// // if (m_AvatarFactory == null ||
|
if (m_AvatarFactory == null ||
|
||||||
// // !m_AvatarFactory.TryGetAvatarAppearance(client.AgentId, out appearance))
|
!m_AvatarFactory.TryGetAvatarAppearance(client.AgentId, out appearance))
|
||||||
// // {
|
{
|
||||||
// // //not found Appearance
|
// not found Appearance
|
||||||
// // m_log.Warn("[AVATAR DEBUGGING]: Couldn't fetch avatar appearance from factory, please report this to the opensim mantis");
|
m_log.Warn("[AVATAR DEBUGGING]: Couldn't fetch avatar appearance from factory, please report this to the opensim mantis");
|
||||||
// // byte[] visualParams;
|
appearance = new AvatarAppearance();
|
||||||
// // AvatarWearable[] wearables;
|
}
|
||||||
// // GetDefaultAvatarAppearance(out wearables, out visualParams);
|
}
|
||||||
// // appearance = new AvatarAppearance(client.AgentId, wearables, visualParams);
|
|
||||||
// // }
|
|
||||||
// }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Remove the given client from the scene.
|
/// Remove the given client from the scene.
|
||||||
|
|
|
@ -59,112 +59,114 @@ namespace OpenSim.Region.Modules.AvatarFactory
|
||||||
|
|
||||||
public bool TryGetAvatarAppearance(LLUUID avatarId, out AvatarAppearance appearance)
|
public bool TryGetAvatarAppearance(LLUUID avatarId, out AvatarAppearance appearance)
|
||||||
{
|
{
|
||||||
|
appearance = m_scene.CommsManager.UserService.GetUserAppearance(avatarId);
|
||||||
|
return true;
|
||||||
|
|
||||||
//should only let one thread at a time do this part
|
// //should only let one thread at a time do this part
|
||||||
EventWaitHandle waitHandle = null;
|
// EventWaitHandle waitHandle = null;
|
||||||
bool fetchInProgress = false;
|
// bool fetchInProgress = false;
|
||||||
lock (m_syncLock)
|
// lock (m_syncLock)
|
||||||
{
|
// {
|
||||||
appearance = CheckCache(avatarId);
|
// appearance = CheckCache(avatarId);
|
||||||
if (appearance != null)
|
// if (appearance != null)
|
||||||
{
|
// {
|
||||||
return true;
|
// return true;
|
||||||
}
|
// }
|
||||||
|
|
||||||
//not in cache so check to see if another thread is already fetching it
|
// //not in cache so check to see if another thread is already fetching it
|
||||||
if (m_fetchesInProgress.TryGetValue(avatarId, out waitHandle))
|
// if (m_fetchesInProgress.TryGetValue(avatarId, out waitHandle))
|
||||||
{
|
// {
|
||||||
fetchInProgress = true;
|
// fetchInProgress = true;
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
fetchInProgress = false;
|
// fetchInProgress = false;
|
||||||
|
|
||||||
//no thread already fetching this appearance, so add a wait handle to list
|
// //no thread already fetching this appearance, so add a wait handle to list
|
||||||
//for any following threads that want the same appearance
|
// //for any following threads that want the same appearance
|
||||||
waitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
|
// waitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
|
||||||
m_fetchesInProgress.Add(avatarId, waitHandle);
|
// m_fetchesInProgress.Add(avatarId, waitHandle);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (fetchInProgress)
|
// if (fetchInProgress)
|
||||||
{
|
// {
|
||||||
waitHandle.WaitOne();
|
// waitHandle.WaitOne();
|
||||||
appearance = CheckCache(avatarId);
|
// appearance = CheckCache(avatarId);
|
||||||
if (appearance != null)
|
// if (appearance != null)
|
||||||
{
|
// {
|
||||||
waitHandle = null;
|
// waitHandle = null;
|
||||||
return true;
|
// return true;
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
waitHandle = null;
|
// waitHandle = null;
|
||||||
return false;
|
// return false;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
// BUG: !? (Reduced from 5000 to 500 by Adam)
|
// // BUG: !? (Reduced from 5000 to 500 by Adam)
|
||||||
Thread.Sleep(500); //why is this here?
|
// Thread.Sleep(500); //why is this here?
|
||||||
|
|
||||||
//this is the first thread to request this appearance
|
// //this is the first thread to request this appearance
|
||||||
//so let it check the db and if not found then create a default appearance
|
// //so let it check the db and if not found then create a default appearance
|
||||||
//and add that to the cache
|
// //and add that to the cache
|
||||||
appearance = CheckDatabase(avatarId);
|
// appearance = CheckDatabase(avatarId);
|
||||||
if (appearance != null)
|
// if (appearance != null)
|
||||||
{
|
// {
|
||||||
//appearance has now been added to cache so lets pulse any waiting threads
|
// //appearance has now been added to cache so lets pulse any waiting threads
|
||||||
lock (m_syncLock)
|
// lock (m_syncLock)
|
||||||
{
|
// {
|
||||||
m_fetchesInProgress.Remove(avatarId);
|
// m_fetchesInProgress.Remove(avatarId);
|
||||||
waitHandle.Set();
|
// waitHandle.Set();
|
||||||
}
|
// }
|
||||||
// waitHandle.Close();
|
// // waitHandle.Close();
|
||||||
waitHandle = null;
|
// waitHandle = null;
|
||||||
return true;
|
// return true;
|
||||||
}
|
// }
|
||||||
|
|
||||||
//not found a appearance for the user, so create a new default one
|
// //not found a appearance for the user, so create a new default one
|
||||||
appearance = CreateDefault(avatarId);
|
// appearance = CreateDefault(avatarId);
|
||||||
if (appearance != null)
|
// if (appearance != null)
|
||||||
{
|
// {
|
||||||
//update database
|
// //update database
|
||||||
if (m_enablePersist)
|
// if (m_enablePersist)
|
||||||
{
|
// {
|
||||||
m_appearanceMapper.Add(avatarId.UUID, appearance);
|
// m_appearanceMapper.Add(avatarId.UUID, appearance);
|
||||||
}
|
// }
|
||||||
|
|
||||||
//add appearance to dictionary cache
|
// //add appearance to dictionary cache
|
||||||
lock (m_avatarsAppearance)
|
// lock (m_avatarsAppearance)
|
||||||
{
|
// {
|
||||||
m_avatarsAppearance[avatarId] = appearance;
|
// m_avatarsAppearance[avatarId] = appearance;
|
||||||
}
|
// }
|
||||||
|
|
||||||
//appearance has now been added to cache so lets pulse any waiting threads
|
// //appearance has now been added to cache so lets pulse any waiting threads
|
||||||
lock (m_syncLock)
|
// lock (m_syncLock)
|
||||||
{
|
// {
|
||||||
m_fetchesInProgress.Remove(avatarId);
|
// m_fetchesInProgress.Remove(avatarId);
|
||||||
waitHandle.Set();
|
// waitHandle.Set();
|
||||||
}
|
// }
|
||||||
// waitHandle.Close();
|
// // waitHandle.Close();
|
||||||
waitHandle = null;
|
// waitHandle = null;
|
||||||
return true;
|
// return true;
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
//something went wrong, so release the wait handle and remove it
|
// //something went wrong, so release the wait handle and remove it
|
||||||
//all waiting threads will fail to find cached appearance
|
// //all waiting threads will fail to find cached appearance
|
||||||
//but its better for them to fail than wait for ever
|
// //but its better for them to fail than wait for ever
|
||||||
lock (m_syncLock)
|
// lock (m_syncLock)
|
||||||
{
|
// {
|
||||||
m_fetchesInProgress.Remove(avatarId);
|
// m_fetchesInProgress.Remove(avatarId);
|
||||||
waitHandle.Set();
|
// waitHandle.Set();
|
||||||
}
|
// }
|
||||||
//waitHandle.Close();
|
// //waitHandle.Close();
|
||||||
waitHandle = null;
|
// waitHandle = null;
|
||||||
return false;
|
// return false;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private AvatarAppearance CreateDefault(LLUUID avatarId)
|
private AvatarAppearance CreateDefault(LLUUID avatarId)
|
||||||
|
|
Loading…
Reference in New Issue