using Mono.Unix;
using Mono.Unix.Native;
+using Stdlib = Mono.Unix.Native.Stdlib;
+
namespace Avahi
{
internal enum ResolverEvent {
public class ClientStateArgs : EventArgs
{
private ClientState state;
+ private ErrorCode error;
public ClientState State
{
get { return state; }
}
- public ClientStateArgs (ClientState state)
+ public ErrorCode Error
+ {
+ get { return error; }
+ }
+
+ public ClientStateArgs (ClientState state, ErrorCode error)
{
this.state = state;
+ this.error = error;
}
}
public void Dispose ()
{
if (handle != IntPtr.Zero) {
- avahi_client_free (handle);
- avahi_simple_poll_quit (spoll);
- avahi_simple_poll_free (spoll);
- handle = IntPtr.Zero;
+ lock (this) {
+ avahi_client_free (handle);
+ handle = IntPtr.Zero;
+
+ avahi_simple_poll_quit (spoll);
+ Monitor.Wait (this);
+
+ avahi_simple_poll_free (spoll);
+ }
}
}
private void OnClientCallback (IntPtr client, ClientState state, IntPtr userData)
{
if (StateChanged != null)
- StateChanged (this, new ClientStateArgs (state));
+ StateChanged (this, new ClientStateArgs (state, LastError));
}
private int OnPollCallback (IntPtr ufds, uint nfds, int timeout) {
try {
lock (this) {
avahi_simple_poll_loop (spoll);
+ Monitor.Pulse (this);
}
} catch (Exception e) {
Console.Error.WriteLine ("Error in avahi-sharp event loop: " + e);