|Bill Allombert on Sun, 06 Jun 2010 13:10:07 +0200|
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
|Re: C++ new and delete like malloc and free?|
On Sat, Jun 05, 2010 at 08:57:13PM +0200, Daniel Allcock wrote: > Hi all, > > I'll probably be spamming the list for a little while since I'm working on a project, > so thanks for your patience. > > I'm developing a program in C++ that uses libpari. I know that pari has wrappers around > malloc and free, namely pari_malloc and pari_free, and that using them protects against stack corruption problems > in the presence of a SIGINT. Well, this issue is mostly for the GP interpretor and is very technical: GP try to recover from SIGINT and allow further computation. However, if SIGINT is pressed while libpari of libc is updating a data structure, the system might be in an inconsistent state, so we provide macros BLOCK_SIGINT_START/BLOCK_SIGINT_END to protect them: if SIGINT is received inside a BLOCK_SIGINT_START/BLOCK_SIGINT_END block, then it is deferred until BLOCK_SIGINT_END. pari_free simply call free() inside such a block to avoid a SIGINT during free() letting the malloc engine state inconsistent. > The docs say pari is C++ compatible, and > there is no mention of analogous problems for operators new and delete in C++. libpari is coded in C and do not use new and delete. > Is the same issue present? If so, what do I do to address it? Just trying to be careful. If new/delete use malloc internally, then I suppose the same problem exist. What you can do is to overload them by methods that do BLOCK_SIGINT_START new ... BLOCK_SIGINT_END. Cheers, Bill.