Assert on WrapRunnableRet with NS_DISPATCH_NORMAL

Bug 847439. Assert on WrapRunnableRet with NS_DISPATCH_NORMAL. r=derf,jesup
This commit is contained in:
EKR 2013-03-04 08:51:48 -08:00
Родитель 586ab0d43a
Коммит 4648337f9e
3 изменённых файлов: 41 добавлений и 1 удалений

Просмотреть файл

@ -18,9 +18,9 @@ namespace mozilla {
class runnable_args_base : public nsRunnable {
public:
NS_IMETHOD Run() = 0;
virtual bool returns_value() const { return false; }
};
// The generated file contains four major function templates
// (in variants for arbitrary numbers of arguments up to 10,
// which is why it is machine generated). The four templates
@ -54,6 +54,15 @@ static inline nsresult RUN_ON_THREAD(nsIEventTarget *thread, nsIRunnable *runnab
return runnable_ref->Run();
}
static inline nsresult RUN_ON_THREAD(nsIEventTarget *thread, runnable_args_base *runnable, uint32_t flags) {
// Detect attempts to return a value when in async mode, since this
// most likely means someone is trying to assign to a heap variable
// which is now out of scope.
MOZ_ASSERT((!(runnable->returns_value()) || (flags != NS_DISPATCH_NORMAL)));
return RUN_ON_THREAD(thread, static_cast<nsIRunnable *>(runnable), flags);
}
#ifdef MOZ_DEBUG
#define ASSERT_ON_THREAD(t) do { \
if (t) { \

Просмотреть файл

@ -89,6 +89,7 @@ def generate_class_template(args, ret = False, member = True):
else:
print " runnable_args_%s_%d_ret("%(nm, args) + gen_args_type(args, member) + ", R *r) :"
print " " + gen_init(args, True, member) + " {}"
print " virtual bool returns_value() const { return true; }"
print
print " NS_IMETHOD Run() {"
if ret:

Просмотреть файл

@ -25,6 +25,7 @@ template<typename M, typename R> class runnable_args_nm_0_ret : public runnable_
public:
runnable_args_nm_0_ret(M m, R *r) :
m_(m), r_(r) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_();
@ -61,6 +62,7 @@ template<typename C, typename M, typename R> class runnable_args_m_0_ret : publi
public:
runnable_args_m_0_ret(C o, M m, R *r) :
o_(o), m_(m), r_(r) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)();
@ -98,6 +100,7 @@ template<typename M, typename A0, typename R> class runnable_args_nm_1_ret : pub
public:
runnable_args_nm_1_ret(M m, A0 a0, R *r) :
m_(m), r_(r), a0_(a0) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_);
@ -136,6 +139,7 @@ template<typename C, typename M, typename A0, typename R> class runnable_args_m_
public:
runnable_args_m_1_ret(C o, M m, A0 a0, R *r) :
o_(o), m_(m), r_(r), a0_(a0) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_);
@ -175,6 +179,7 @@ template<typename M, typename A0, typename A1, typename R> class runnable_args_n
public:
runnable_args_nm_2_ret(M m, A0 a0, A1 a1, R *r) :
m_(m), r_(r), a0_(a0), a1_(a1) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_, a1_);
@ -215,6 +220,7 @@ template<typename C, typename M, typename A0, typename A1, typename R> class run
public:
runnable_args_m_2_ret(C o, M m, A0 a0, A1 a1, R *r) :
o_(o), m_(m), r_(r), a0_(a0), a1_(a1) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_, a1_);
@ -256,6 +262,7 @@ template<typename M, typename A0, typename A1, typename A2, typename R> class ru
public:
runnable_args_nm_3_ret(M m, A0 a0, A1 a1, A2 a2, R *r) :
m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_, a1_, a2_);
@ -298,6 +305,7 @@ template<typename C, typename M, typename A0, typename A1, typename A2, typename
public:
runnable_args_m_3_ret(C o, M m, A0 a0, A1 a1, A2 a2, R *r) :
o_(o), m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_, a1_, a2_);
@ -341,6 +349,7 @@ template<typename M, typename A0, typename A1, typename A2, typename A3, typenam
public:
runnable_args_nm_4_ret(M m, A0 a0, A1 a1, A2 a2, A3 a3, R *r) :
m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_, a1_, a2_, a3_);
@ -385,6 +394,7 @@ template<typename C, typename M, typename A0, typename A1, typename A2, typename
public:
runnable_args_m_4_ret(C o, M m, A0 a0, A1 a1, A2 a2, A3 a3, R *r) :
o_(o), m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_, a1_, a2_, a3_);
@ -430,6 +440,7 @@ template<typename M, typename A0, typename A1, typename A2, typename A3, typenam
public:
runnable_args_nm_5_ret(M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, R *r) :
m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_, a1_, a2_, a3_, a4_);
@ -476,6 +487,7 @@ template<typename C, typename M, typename A0, typename A1, typename A2, typename
public:
runnable_args_m_5_ret(C o, M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, R *r) :
o_(o), m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_, a1_, a2_, a3_, a4_);
@ -523,6 +535,7 @@ template<typename M, typename A0, typename A1, typename A2, typename A3, typenam
public:
runnable_args_nm_6_ret(M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, R *r) :
m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_, a1_, a2_, a3_, a4_, a5_);
@ -571,6 +584,7 @@ template<typename C, typename M, typename A0, typename A1, typename A2, typename
public:
runnable_args_m_6_ret(C o, M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, R *r) :
o_(o), m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_, a1_, a2_, a3_, a4_, a5_);
@ -620,6 +634,7 @@ template<typename M, typename A0, typename A1, typename A2, typename A3, typenam
public:
runnable_args_nm_7_ret(M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, R *r) :
m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_, a1_, a2_, a3_, a4_, a5_, a6_);
@ -670,6 +685,7 @@ template<typename C, typename M, typename A0, typename A1, typename A2, typename
public:
runnable_args_m_7_ret(C o, M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, R *r) :
o_(o), m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_, a1_, a2_, a3_, a4_, a5_, a6_);
@ -721,6 +737,7 @@ template<typename M, typename A0, typename A1, typename A2, typename A3, typenam
public:
runnable_args_nm_8_ret(M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, R *r) :
m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_);
@ -773,6 +790,7 @@ template<typename C, typename M, typename A0, typename A1, typename A2, typename
public:
runnable_args_m_8_ret(C o, M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, R *r) :
o_(o), m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_);
@ -826,6 +844,7 @@ template<typename M, typename A0, typename A1, typename A2, typename A3, typenam
public:
runnable_args_nm_9_ret(M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, R *r) :
m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_);
@ -880,6 +899,7 @@ template<typename C, typename M, typename A0, typename A1, typename A2, typename
public:
runnable_args_m_9_ret(C o, M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, R *r) :
o_(o), m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_);
@ -935,6 +955,7 @@ template<typename M, typename A0, typename A1, typename A2, typename A3, typenam
public:
runnable_args_nm_10_ret(M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, R *r) :
m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8), a9_(a9) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_);
@ -991,6 +1012,7 @@ template<typename C, typename M, typename A0, typename A1, typename A2, typename
public:
runnable_args_m_10_ret(C o, M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, R *r) :
o_(o), m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8), a9_(a9) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_);
@ -1048,6 +1070,7 @@ template<typename M, typename A0, typename A1, typename A2, typename A3, typenam
public:
runnable_args_nm_11_ret(M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, R *r) :
m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8), a9_(a9), a10_(a10) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_, a10_);
@ -1106,6 +1129,7 @@ template<typename C, typename M, typename A0, typename A1, typename A2, typename
public:
runnable_args_m_11_ret(C o, M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, R *r) :
o_(o), m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8), a9_(a9), a10_(a10) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_, a10_);
@ -1165,6 +1189,7 @@ template<typename M, typename A0, typename A1, typename A2, typename A3, typenam
public:
runnable_args_nm_12_ret(M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, R *r) :
m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8), a9_(a9), a10_(a10), a11_(a11) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_, a10_, a11_);
@ -1225,6 +1250,7 @@ template<typename C, typename M, typename A0, typename A1, typename A2, typename
public:
runnable_args_m_12_ret(C o, M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, R *r) :
o_(o), m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8), a9_(a9), a10_(a10), a11_(a11) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_, a10_, a11_);
@ -1286,6 +1312,7 @@ template<typename M, typename A0, typename A1, typename A2, typename A3, typenam
public:
runnable_args_nm_13_ret(M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, R *r) :
m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8), a9_(a9), a10_(a10), a11_(a11), a12_(a12) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_, a10_, a11_, a12_);
@ -1348,6 +1375,7 @@ template<typename C, typename M, typename A0, typename A1, typename A2, typename
public:
runnable_args_m_13_ret(C o, M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, R *r) :
o_(o), m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8), a9_(a9), a10_(a10), a11_(a11), a12_(a12) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_, a10_, a11_, a12_);
@ -1411,6 +1439,7 @@ template<typename M, typename A0, typename A1, typename A2, typename A3, typenam
public:
runnable_args_nm_14_ret(M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, R *r) :
m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8), a9_(a9), a10_(a10), a11_(a11), a12_(a12), a13_(a13) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = m_(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_, a10_, a11_, a12_, a13_);
@ -1475,6 +1504,7 @@ template<typename C, typename M, typename A0, typename A1, typename A2, typename
public:
runnable_args_m_14_ret(C o, M m, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, R *r) :
o_(o), m_(m), r_(r), a0_(a0), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8), a9_(a9), a10_(a10), a11_(a11), a12_(a12), a13_(a13) {}
virtual bool returns_value() const { return true; }
NS_IMETHOD Run() {
*r_ = ((*o_).*m_)(a0_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_, a10_, a11_, a12_, a13_);