Skip to content

Commit

Permalink
tmp
Browse files Browse the repository at this point in the history
  • Loading branch information
esdrubal committed Jan 7, 2016
1 parent 9be02d4 commit f8bf6aa
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 4 deletions.
29 changes: 25 additions & 4 deletions mcs/class/corlib/System/Exception.cs
Expand Up @@ -70,6 +70,7 @@ public class Exception : ISerializable, _Exception
internal StackTrace[] captured_traces;
IntPtr[] native_trace_ips;
object dynamic_methods;
SafeSerializationManager _safeSerializationManager;
#endregion
#pragma warning restore 169, 649

Expand Down Expand Up @@ -104,6 +105,8 @@ protected Exception (SerializationInfo info, StreamingContext context)
} catch (SerializationException) {
// member did not exist in .NET 1.x
}

_safeSerializationManager = info.GetValueNoThrow("SafeSerializationManager", typeof(SafeSerializationManager)) as SafeSerializationManager;
}

public Exception (string message, Exception innerException)
Expand Down Expand Up @@ -161,10 +164,8 @@ internal void SetStackTrace (string s)

[MonoTODO]
protected event EventHandler<SafeSerializationEventArgs> SerializeObjectState {
add {
}
remove {
}
add { _safeSerializationManager.SerializeObjectState += value; }
remove { _safeSerializationManager.SerializeObjectState -= value; }
}

public virtual string Source {
Expand Down Expand Up @@ -257,6 +258,26 @@ public virtual void GetObjectData (SerializationInfo info, StreamingContext cont
info.AddValue ("Source", Source);
info.AddValue ("ExceptionMethod", null);
info.AddValue ("Data", _data, typeof (IDictionary));

if (_safeSerializationManager == null)
_safeSerializationManager = new SafeSerializationManager();

if (_safeSerializationManager.IsActive)
{
info.AddValue("SafeSerializationManager", _safeSerializationManager, typeof(SafeSerializationManager));

// Handle serializing any transparent or partial trust subclass data
_safeSerializationManager.CompleteSerialization(this, info, context);
}
}

[OnDeserialized]
private void OnDeserialized(StreamingContext context)
{
if (_safeSerializationManager == null)
_safeSerializationManager = new SafeSerializationManager();

_safeSerializationManager.CompleteDeserialization(this);
}

public override string ToString ()
Expand Down
1 change: 1 addition & 0 deletions mono/metadata/object-internals.h
Expand Up @@ -261,6 +261,7 @@ struct _MonoException {
MonoArray *native_trace_ips;
/* Dynamic methods referenced by the stack trace */
MonoObject *dynamic_methods;
MonoObject *safe_serialization_manager;
};

typedef struct {
Expand Down

0 comments on commit f8bf6aa

Please sign in to comment.