|
Boost Users : |
Subject: [Boost-users] [asio] An error occured in asio::win_mutex.hpp
From: Yasuhiko Yoshimura \(informax.co.jp\) (yoshimura_at_[hidden])
Date: 2010-09-15 06:44:13
Hi ALL,
I have encountered this error, and would like to program a win32 FTP client with asio lib.
In asio examples I reffenrenced at the 'Services(logger program)'.
Could you help me ?
I appriciate any suggestion.
Thank all,
Yasuhiko Yoshimura (Japan)
An accsess violence occured at the below ===>> point.
win_mutex.hpp:line 125:
------------------------------------------------------------------------
Then variable values are:
&crit_section_ 0xcdcdcdcd
this 0xcdcdcdcd (boost::noncopyable_::noncopyable)
// Locking must be performed in a separate function to lock() since the
// compiler does not support the use of structured exceptions and C++
// exceptions in the same function.
int do_lock()
{
__try
{
===>> ::EnterCriticalSection(&crit_section_);
}
__except(GetExceptionCode() == STATUS_INVALID_HANDLE
|| GetExceptionCode() == STATUS_NO_MEMORY
? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
if (GetExceptionCode() == STATUS_NO_MEMORY)
return ERROR_OUTOFMEMORY;
return ERROR_INVALID_HANDLE;
}
return 0;
}
------------------------------------------------------------------------
Here are my codes below.
And error point was ===>>
------------------------------------------------------------------------
using boost::asio::ip::tcp;
class ftp_client_dtp
: public boost::enable_shared_from_this<ftp_client_dtp>
{
public:
typedef boost::shared_ptr<ftp_client_dtp> pointer;
static pointer create(boost::asio::io_service& io_service)
{
return pointer(new ftp_client_dtp(io_service));
}
tcp::socket& socket()
{
return *work_socket_;
}
...
void start()
{
work_thread_.reset(new boost::thread(
boost::bind(&boost::asio::io_service::run, &work_io_service_)));
// Start an asynchronous resolve to translate the server and service names
// into a list of endpoints.
tcp::resolver::query query(sip_, sport_);
work_resolver_->async_resolve(query,
boost::bind(&ftp_client_dtp::handle_resolve, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::iterator));
}
void close()
{
work_io_service_.post(boost::bind(&ftp_client_dtp::do_close, shared_from_this()));
}
ftp_client_dtp(boost::asio::io_service& io_service)
: work_io_service_(),
work_resolver_(new boost::asio::ip::tcp::resolver(work_io_service_)),
work_socket_(new boost::asio::ip::tcp::socket(work_io_service_))
===>> {
}
~ftp_client_dtp()
{
work_.reset();
if (work_thread_)
work_thread_->join();
}
private:
std::ofstream f;
void handle_resolve(const boost::system::error_code& err,
tcp::resolver::iterator endpoint_iterator)
{
...
}
void handle_connect(const boost::system::error_code& err,
tcp::resolver::iterator endpoint_iterator)
{
...
}
void handle_read_content(const boost::system::error_code& err)
{
...
}
void do_close()
{
work_socket_->close();
}
std::string sip_, sport_, scurrentpath_, sfilename_;
boost::asio::streambuf request_;
boost::asio::streambuf response_;
boost::scoped_ptr<boost::asio::ip::tcp::resolver> work_resolver_;
boost::scoped_ptr<boost::asio::ip::tcp::socket> work_socket_;
boost::asio::io_service work_io_service_;
boost::scoped_ptr<boost::asio::io_service::work> work_;
boost::scoped_ptr<boost::thread> work_thread_;
};
ftp_client_dtp::pointer new_connection_;
new_connection_ = ftp_client_dtp::create(io_service_);
new_connection_->start();
------------------------------------------------------------------------
Thank all,
Yasuhiko Yoshimura (Japan)
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net