D - More than one out parameter a problem
- Matthew Wilson (78/78) Apr 12 2003 Is this phenomenon known?
Is this phenomenon known?
Having one or the other of the parameters to XFactory::X_Acquire() as an out
parameter works fine, but if both are we get an crash. I have not boiled
this right down, but it could be done so by changing worker_proc into main.
class X
{
}
class XFactory
{
private:
static this()
{
sm_semaphore = new Semaphore(NUM_ITEMS, NUM_ITEMS);
}
~this()
{
delete m_semaphore;
}
public:
static void X_hello(X x)
{
printf("Hello from within the XFactory\n\n");
}
static void X_Acquire(out X x, out int key)
{
printf("X_Acquire\n");
x = null;
key = 1;
sm_semaphore.wait();
}
static void X_Release(X x, out int key)
{
key = 0;
sm_semaphore.release();
}
private:
enum { NUM_ITEMS = 5 };
static Semaphore sm_semaphore;
};
auto class XUser
{
public:
this()
{
m_x = null;
m_key = 0;
printf("1");
XFactory.X_hello(m_x); // ** <== This call works fine
printf("2");
XFactory.X_Acquire(m_x, m_key); // ** <== This call crashes, if
both are out params
printf("3");
}
~this()
{
printf("4");
if(m_key != 0)
{
XFactory.X_Release(m_x, m_key);
}
}
private:
X m_x;
int m_key;
};
int worker_proc(void *_arg)
{
//printf("Entering the thread\n");
ThreadInfo threadinfo = (ThreadInfo)(_arg);
int i;
for(i = 0; i < threadinfo.cIterations; ++i)
{
auto XUser user = new XUser; // Acquire the resource;
uses RAII
// [snip]
}
return 0;
}
Apr 12 2003








"Matthew Wilson" <matthew stlsoft.org>