Re: [reSIProcate] [spam] Re: [spam] Re: static StatisticsMessage::AtomicPayload appStats; in poll() may not thread safe
It is fixed on main.
On 10/24/06, maodonghu <hhmmdd@xxxxxxx> wrote:
Hi, resip
anyone can fix this bug?
======== 2006-10-19 01:11:28 ========
hi maodonghu,
well, i'm sorry , i doesn't careful inspection with your question,
that is a bug with the code, em. may be appStats can move
into static global area. I think that appStats can initialize first. may be to
avert the thread safe issue.
btw, why you use multi-stack in your process ?
sincerely,
jinti
在06-10-18, maodonghu <hhmmdd@xxxxxxx> 写道:
>
> Hi, shen jinti
>
> By the way, I use Pentinum D, it has 2 CPU, so the exception may
be easy to encounter.
>
>
> ======== 2006-10-18 10:37:34 ========
>
>
>
> hi maodonghu,
>
> you must compile with /MD or /MT option in you all
project.
>
> jinti
>
>
>
> 在06-10-18,maodonghu < hhmmdd@xxxxxxx> 写道:
>
> > hi,
> >
> > I found my multi-thread program that using resiprocate
will crashed sometimes when startup, the place is
> >
> > void
> > StatisticsMessage::AtomicPayload::loadIn(const
Payload& payload)
> > {
> > Lock lock(mMutex); // --> here cause crash, because
the mMutex may have not finished its constructor yet.
> > Payload::operator=(payload);
> > }
> >
> > then I research the source code, I
found
> >
> > void
> > StatisticsManager::poll()
> > {
> > // get snapshot data now..
> > tuFifoSize =
mStack.mTransactionController.getTuFifoSize();
> > transportFifoSizeSum =
mStack.mTransactionController.sumTransportFifoSizes();
> > transactionFifoSize =
mStack.mTransactionController.getTransactionFifoSize();
> > activeTimers =
mStack.mTransactionController.getTimerQueueSize();
> > activeClientTransactions =
mStack.mTransactionController.getNumClientTransactions();
> > activeServerTransactions =
mStack.mTransactionController.getNumServerTransactions();
> >
> > static StatisticsMessage::AtomicPayload appStats; //
--> here may not thread safe
> > appStats.loadIn(*this);
> >
> > // let the app do what it wants with it
> > mStack.post(StatisticsMessage(appStats));
> > }
> >
> >
> > Because I have multi-SipStacks in my program, so I
have multi-StackThread, I think the usage of static local
variable here may not thread safe, appStats should be a
static member of class StatisticsManager.
> >
> > the MSDN help also tell us:
> >
> > Note
> > Assigning to a static local variable is not thread
safe and is not recommended as a programming practice.
> >
> >
> >
> > maodonghu
> > hhmmdd@xxxxxxx
> > 2006-10-18
> >
> > _______________________________________________
> > resiprocate-devel mailing list
> > resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> > https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel
>
>
>
>
> = = = = = = = = = = = = = = = = = = = = = =
>
> maodonghu
> hhmmdd@xxxxxxx
> 2006-10-18
>
= = = = = = = = = = = = = = = = = = = = = =
maodonghu
hhmmdd@xxxxxxx
2006-10-24
_______________________________________________
resiprocate-devel mailing list
resiprocate-devel@xxxxxxxxxxxxxxxxxxx
https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel