Re: Compiling C++ modules

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tuesday 25 April 2006 20:53, Avi Kivity wrote:
> Very often one needs to acquire a resource, do something with it, and 
> then free the resource. Here, "resource" can mean a file descriptor, a 
> reference into a reference counted object, or, in our case, a spinlock. 
> And we want "free" to mean "free no matter what", e.g. on a normal path 
> or an exception path.

...

> Additionally, C++ guarantees that if an exception is thrown after 
> spin_lock() is called, then the spin_unlock() will also be called. 
> That's an interesting mechanism by itself.

Life gets even more interesting when you hit another exception
inside destructor(s) being executed due to first one.
Say, spin_unlock() discovers that lock is already unlocked
and does "throw BUG_double_unlock".

Even if you
(a) remember what standard says about it
(b) implemented nested exception handling correctly,
	then you are still left with
(c) let's pray gcc has no bugs in stack unwinding
    and nested exceptions and nested destructor calls.

Mozilla crashes over such things. For Mozilla, crash is not
*that* catastrophic. For OS kernel, it is.
--
vda
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux