[
https://issues.apache.org/jira/browse/QPID-3193?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13017723#comment-13017723
]
Cliff Jansen commented on QPID-3193:
------------------------------------
The proposed changes look very good.
As a very minor quibble, it is considered poor form to lock on "this" or any
public object. I know Microsoft's own documentation is inconsistent about
this, but the .NET police will usually recommend the following:
{quote}
In general, avoid locking on a public type, or instances beyond your code's
control. The common constructs lock (this), lock (typeof (MyType)), and lock
("myLock") violate this guideline:
lock (this) is a problem if the instance can be accessed publicly.
lock (typeof (MyType)) is a problem if MyType is publicly accessible.
lock("myLock") is a problem because any other code in the process using the
same string, will share the same lock.
Best practice is to define a private object to lock on, or a private static
object variable to protect data common to all instances.
{quote}
> .NET Binding for Messaging classes need a test to check that binding is still
> in effect
> ---------------------------------------------------------------------------------------
>
> Key: QPID-3193
> URL: https://issues.apache.org/jira/browse/QPID-3193
> Project: Qpid
> Issue Type: Improvement
> Affects Versions: 0.11
> Reporter: Chuck Rolke
> Assignee: Chuck Rolke
>
> The .NET Binding for Messaging could be made more user-friendly with the
> addition of a property that indicates whether or not the underlying binding
> is still available. A C# coder may innocently write:
> (1) Message mA = new Message("a");
> (2) Message mB = mA;
> ...
> (N) mB.Dispose();
> After disposing of message mB then message mA is clobbered. 'Message' is a
> 'ref class' type and messages mA and mB refer to the same object on managed
> heap. When message mB is disposed then the bound C++ Messaging object is
> deleted [1]. Any reference to the bound message part of mA will result in an
> illegal memory reference (to 0) and a process exit. The .NET runtime can't
> catch this fault.
> The obvious answer is not to do that. If the second line of code was 'Message
> mB = new Message(mA)' then mA and mB would have been completely separate and
> disposing of either would have no effect on the other.
> Another answer is to have the binding check for a null binding reference on
> each and every access and then to throw if the underlying binding is gone.
> This is not very appealing from a performance standpoint.
> As a compromise I would like to add a property isBound to each class. Users
> then have a fighting chance to check that the binding is still in effect and
> that function calls on the object shouldn't blow up. This property would be
> useful in Assert statements or in debugging.
> [1] If anyone knows how to have my binding library intercept example code
> line (2) and create reference counts, please let me know.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]