, finished = v.t.polls.Drop(v.requestID, v.vdr)
	} else {
		results, finished = v.t.polls.Vote(v.requestID, v.vdr, v.response)
	}

	if !finished {
		return
	}

	// To prevent any potential deadlocks with un-disclosed dependencies, votes
	// must be bubbled to the nearest valid block
	results = v.bubbleVotes(results)

	v.t.Ctx.Log.Debug("Finishing poll [%d] with:\n%s", v.requestID, &results)
	if err := v.t.Consensus.RecordPoll(results); err != nil {
		v.t.errs.Add(err)
		return
	}

	v.t.VM.SetPreference(v.t.Consensus.Preference())

	if v.t.Consensus.Finalized() {
		v.t.Ctx.Log.Debug("Snowman engine can quiesce")
		return
	}

	v.t.Ctx.Log.Debug("Snowman engine can't quiesce")
	v.t.repoll()
}

func (v *voter) bubbleVotes(votes ids.Bag) ids.Bag {
	bubbledVotes := ids.Bag{}
	for _, vote := range votes.List() {
		count := votes.Count(vote)
		blk, err := v.t.VM.GetBlock(vote)
		if err != nil {
			continue
		}

		for blk.Status().Fetched() && !v.t.Consensus.Issued(blk) {
			blk = blk.Parent()
		}

		if !blk.Status().Decided() && v.t.Consensus.Issued(blk) {
			bubbledVotes.AddCount(blk.ID(), count)
		}
	}
	return bubbledVotes
}


# .NET Metadata Dumper

This samples uses the [.NET Metadata Reader][MDReader] to dump the contents
of the [ECMA-335] metadata contained in a .NET assembly (or module).

[MDReader]: http://www.nuget.org/packages/Microsoft.Bcl.Metadata
[ECMA-335]: http://www.ecma-international.org/publications/standards/Ecma-335.htm

// Copyright (C) 2014 Vicente J. Botet Escriba
//
//  Distributed under the Boost Software License, Version 1.0. (See accompanying
//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//

#ifndef BOOST_THREAD_EXECUTORS_GENERIC_EXECUTOR_REF_HPP
#define BOOST_THREAD_EXECUTORS_GENERIC_EXECUTOR_REF_HPP

#include <boost/thread/detail/config.hpp>

#include <boost/thread/detail/delete.hpp>
#include <boost/thread/detail/move.hpp>
#include <boost/thread/executors/executor.hpp>

#include <boost/shared_ptr.hpp>

#include <boost/config/abi_prefix.hpp>

namespace boost
{
  nam