fxruby 1.6.31-x64-mingw32 → 1.6.32.pre1-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.txt +6 -0
- data/ext/fox16_c/FXRuby.cpp +18 -27
- data/ext/fox16_c/extconf.rb +5 -0
- data/ext/fox16_c/include/FXRbWindow.h +2 -2
- data/ext/fox16_c/include/FXRuby.h +0 -4
- data/ext/fox16_c/markfuncs.cpp +0 -24
- data/lib/2.0/fox16_c.so +0 -0
- data/lib/2.1/fox16_c.so +0 -0
- data/lib/2.2/fox16_c.so +0 -0
- data/lib/fox16/version.rb +1 -1
- data/lib/x64-mingw32/libFOX-1.6-0.dll +0 -0
- data/lib/x64-mingw32/libfxscintilla-20.dll +0 -0
- data/lib/x64-mingw32/libgcc_s_sjlj-1.dll +0 -0
- data/lib/x64-mingw32/libjpeg-8.dll +0 -0
- data/lib/x64-mingw32/libpng15-15.dll +0 -0
- data/lib/x64-mingw32/libstdc++-6.dll +0 -0
- data/lib/x64-mingw32/libtiff-5.dll +0 -0
- data/lib/x64-mingw32/libwinpthread-1.dll +0 -0
- data/lib/x64-mingw32/zlib1.dll +0 -0
- data/test/TC_FXTreeList.rb +2 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1df74fbb576c28ebefaeadfc86037b37c6b95910
|
4
|
+
data.tar.gz: 5e9d5153a286bce4a812ddbb69dc781f894c207e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc48ac8e98eeeafef1450e7163870f7c14b67ada4d75dc5aa2efec2b9205c209d609966f9a72dbf4fdcefe91c617f86f3e8d088754ad6b20891b0b18eaffaa6e
|
7
|
+
data.tar.gz: 472a790b49ab071f301fd44d3e7e26d4c7222027835fffbb98d8da9f2e7e5ead4369e7c8c154b864bad876bfa4fb0e62f193b12c161885475dc92ef3d74ba83a
|
data/History.txt
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
=== 1.6.32 / unreleased
|
2
|
+
|
3
|
+
* Avoid call to rb_class2name() during GC. Fixes #21
|
4
|
+
* Use release mode, unless extconf.rb is called with --enable-debug,
|
5
|
+
so that all FXTRACE() and FXASSERT() calls are skiped, per default.
|
6
|
+
|
1
7
|
=== 1.6.31 / 2015-07-21
|
2
8
|
|
3
9
|
* Replace pipe2() by pipe() and fcntl(), because pipe2() is not as portable.
|
data/ext/fox16_c/FXRuby.cpp
CHANGED
@@ -83,6 +83,17 @@ swig_type_info *FXRbTypeQuery(const char *desc){
|
|
83
83
|
|
84
84
|
static st_table * FXRuby_Objects;
|
85
85
|
|
86
|
+
static const char * const safe_rb_obj_classname(VALUE obj)
|
87
|
+
{
|
88
|
+
if( rb_during_gc() ){
|
89
|
+
/* It's not safe to call rb_obj_classname() during GC.
|
90
|
+
* Return dummy value in this case. */
|
91
|
+
return "during GC";
|
92
|
+
} else {
|
93
|
+
return rb_obj_classname(obj);
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
86
97
|
/**
|
87
98
|
* Each value in the FXRuby_Objects hash table is an instance of this
|
88
99
|
* struct. It identifies the Ruby instance associated with a C++ object.
|
@@ -115,7 +126,7 @@ VALUE FXRbNewPointerObj(void *ptr,swig_type_info* ty){
|
|
115
126
|
FXRubyObjDesc *desc;
|
116
127
|
if(FXMALLOC(&desc,FXRubyObjDesc,1)){
|
117
128
|
obj=SWIG_Ruby_NewPointerObj(ptr,ty,1);
|
118
|
-
FXTRACE((1,"FXRbNewPointerObj(foxObj=%p) => rubyObj=%p (%s)\n",ptr,(void *)obj,
|
129
|
+
FXTRACE((1,"FXRbNewPointerObj(foxObj=%p) => rubyObj=%p (%s)\n",ptr,(void *)obj,safe_rb_obj_classname(obj)));
|
119
130
|
desc->obj=obj;
|
120
131
|
desc->borrowed=true;
|
121
132
|
desc->in_gc=false;
|
@@ -150,25 +161,6 @@ bool FXRbIsBorrowed(void* ptr){
|
|
150
161
|
}
|
151
162
|
}
|
152
163
|
|
153
|
-
bool FXRbSetInGC(const void* ptr, bool enabled){
|
154
|
-
FXASSERT(ptr!=0);
|
155
|
-
FXRubyObjDesc *desc;
|
156
|
-
if(st_lookup(FXRuby_Objects,reinterpret_cast<st_data_t>(ptr),reinterpret_cast<st_data_t *>(&desc))!=0){
|
157
|
-
desc->in_gc=enabled;
|
158
|
-
return enabled;
|
159
|
-
}
|
160
|
-
return false;
|
161
|
-
}
|
162
|
-
|
163
|
-
bool FXRbIsInGC(const void* ptr){
|
164
|
-
FXASSERT(ptr!=0);
|
165
|
-
FXRubyObjDesc *desc;
|
166
|
-
if(st_lookup(FXRuby_Objects,reinterpret_cast<st_data_t>(ptr),reinterpret_cast<st_data_t *>(&desc))!=0){
|
167
|
-
return desc->in_gc;
|
168
|
-
}
|
169
|
-
return false;
|
170
|
-
}
|
171
|
-
|
172
164
|
|
173
165
|
/**
|
174
166
|
* FXRbConvertPtr() is just a wrapper around SWIG_ConvertPtr().
|
@@ -267,7 +259,7 @@ void FXRbRegisterRubyObj(VALUE rubyObj,const void* foxObj) {
|
|
267
259
|
FXASSERT(!NIL_P(rubyObj));
|
268
260
|
FXASSERT(foxObj!=0);
|
269
261
|
FXRubyObjDesc* desc;
|
270
|
-
FXTRACE((1,"FXRbRegisterRubyObj(rubyObj=%p (%s),foxObj=%p)\n",(void *)rubyObj,
|
262
|
+
FXTRACE((1,"FXRbRegisterRubyObj(rubyObj=%p (%s),foxObj=%p)\n",(void *)rubyObj,safe_rb_obj_classname(rubyObj),foxObj));
|
271
263
|
if(st_lookup(FXRuby_Objects,reinterpret_cast<st_data_t>(const_cast<void*>(foxObj)),reinterpret_cast<st_data_t *>(&desc))!=0){
|
272
264
|
FXASSERT(desc->borrowed);
|
273
265
|
/* There is already a Ruby object registered for this foxObj.
|
@@ -308,7 +300,7 @@ void FXRbUnregisterRubyObj2(const void* foxObj, bool alsoOwned){
|
|
308
300
|
FXRubyObjDesc* desc;
|
309
301
|
if(st_lookup(FXRuby_Objects,reinterpret_cast<st_data_t>(const_cast<void*>(foxObj)),reinterpret_cast<st_data_t *>(&desc))!=0){
|
310
302
|
if( !alsoOwned && !desc->borrowed ) return;
|
311
|
-
FXTRACE((1,"FXRbUnregisterRubyObj(rubyObj=%p (%s),foxObj=%p)\n",(void *)desc->obj,
|
303
|
+
FXTRACE((1,"FXRbUnregisterRubyObj(rubyObj=%p (%s),foxObj=%p)\n",(void *)desc->obj,safe_rb_obj_classname(desc->obj),foxObj));
|
312
304
|
DATA_PTR(desc->obj)=0;
|
313
305
|
FXFREE(&desc);
|
314
306
|
st_delete(FXRuby_Objects,reinterpret_cast<st_data_t *>(const_cast<void**>(&foxObj)),reinterpret_cast<st_data_t *>(0));
|
@@ -356,7 +348,7 @@ VALUE FXRbGetRubyObj(const void *foxObj,bool alsoBorrowed){
|
|
356
348
|
if(foxObj!=0 && st_lookup(FXRuby_Objects,reinterpret_cast<st_data_t>(const_cast<void*>(foxObj)),reinterpret_cast<st_data_t *>(&desc))!=0){
|
357
349
|
FXASSERT(desc!=0);
|
358
350
|
if(alsoBorrowed || !desc->borrowed){
|
359
|
-
FXTRACE((2,"FXRbGetRubyObj(foxObj=%p) => rubyObj=%p (%s)\n",foxObj,(void *)desc->obj,
|
351
|
+
FXTRACE((2,"FXRbGetRubyObj(foxObj=%p) => rubyObj=%p (%s)\n",foxObj,(void *)desc->obj,safe_rb_obj_classname(desc->obj)));
|
360
352
|
return desc->obj;
|
361
353
|
}
|
362
354
|
}
|
@@ -1435,7 +1427,6 @@ void FXRbRange2LoHi(VALUE range,FXdouble& lo,FXdouble& hi){
|
|
1435
1427
|
void FXRbCallVoidMethod_gvlcb(FXObject* recv, const char *func) {
|
1436
1428
|
VALUE obj=FXRbGetRubyObj(recv,false);
|
1437
1429
|
FXASSERT(!NIL_P(obj));
|
1438
|
-
FXASSERT(!FXRbIsInGC(recv));
|
1439
1430
|
rb_funcall(obj,rb_intern(func),0,NULL);
|
1440
1431
|
}
|
1441
1432
|
|
@@ -1642,7 +1633,7 @@ void FXRbCallDCDrawMethod_gvlcb(FXDC* recv, const char * func, FXint x,FXint y,c
|
|
1642
1633
|
FXRbMenuCommand::~FXRbMenuCommand(){
|
1643
1634
|
FXAccelTable *table;
|
1644
1635
|
FXWindow *owner;
|
1645
|
-
if(acckey && !
|
1636
|
+
if(acckey && !rb_during_gc()){
|
1646
1637
|
owner=getShell()->getOwner();
|
1647
1638
|
if(owner){
|
1648
1639
|
table=owner->getAccelTable();
|
@@ -1658,7 +1649,7 @@ FXRbMenuCommand::~FXRbMenuCommand(){
|
|
1658
1649
|
FXRbMenuCheck::~FXRbMenuCheck(){
|
1659
1650
|
FXAccelTable *table;
|
1660
1651
|
FXWindow *owner;
|
1661
|
-
if(acckey && !
|
1652
|
+
if(acckey && !rb_during_gc()){
|
1662
1653
|
owner=getShell()->getOwner();
|
1663
1654
|
if(owner){
|
1664
1655
|
table=owner->getAccelTable();
|
@@ -1674,7 +1665,7 @@ FXRbMenuCheck::~FXRbMenuCheck(){
|
|
1674
1665
|
FXRbMenuRadio::~FXRbMenuRadio(){
|
1675
1666
|
FXAccelTable *table;
|
1676
1667
|
FXWindow *owner;
|
1677
|
-
if(acckey && !
|
1668
|
+
if(acckey && !rb_during_gc()){
|
1678
1669
|
owner=getShell()->getOwner();
|
1679
1670
|
if(owner){
|
1680
1671
|
table=owner->getAccelTable();
|
data/ext/fox16_c/extconf.rb
CHANGED
@@ -230,6 +230,7 @@ def do_rake_compiler_setup
|
|
230
230
|
"--without-x",
|
231
231
|
"--enable-shared",
|
232
232
|
"--disable-static",
|
233
|
+
enable_config("debug") ? "--enable-debug" : "--enable-release",
|
233
234
|
]
|
234
235
|
class << recipe
|
235
236
|
def compile
|
@@ -390,6 +391,10 @@ unless enable_config("win32-cross")
|
|
390
391
|
end
|
391
392
|
end
|
392
393
|
|
394
|
+
unless enable_config("debug")
|
395
|
+
$CPPFLAGS += " -DNDEBUG"
|
396
|
+
end
|
397
|
+
|
393
398
|
# Platform-specific modifications
|
394
399
|
do_rake_compiler_setup
|
395
400
|
|
@@ -149,7 +149,7 @@ inline void klass ## _dropDisable(klass* self){ \
|
|
149
149
|
FXRbCallVoidMethod(this,"killFocus"); \
|
150
150
|
} \
|
151
151
|
void cls::changeFocus(FXWindow* child){ \
|
152
|
-
if(!
|
152
|
+
if(!rb_during_gc()) FXRbCallVoidMethod(this,"changeFocus",child); \
|
153
153
|
} \
|
154
154
|
void cls::setDefault(FXbool enable){ \
|
155
155
|
FXRbCallVoidMethod(this,"setDefault",enable); \
|
@@ -173,7 +173,7 @@ inline void klass ## _dropDisable(klass* self){ \
|
|
173
173
|
FXRbCallVoidMethod(this,"position",x,y,w,h); \
|
174
174
|
} \
|
175
175
|
void cls::recalc(){ \
|
176
|
-
if(!
|
176
|
+
if(!rb_during_gc()) FXRbCallVoidMethod(this,"recalc"); \
|
177
177
|
} \
|
178
178
|
void cls::reparent(FXWindow* father,FXWindow* other){ \
|
179
179
|
FXRbCallVoidMethod(this,"reparent",father,other); \
|
@@ -81,8 +81,6 @@ VALUE showHelper(VALUE self, int argc, VALUE *argv, TYPE *p, swig_type_info *typ
|
|
81
81
|
// Wrapper around SWIG_Ruby_NewPointerObj()
|
82
82
|
VALUE FXRbNewPointerObj(void *ptr, swig_type_info *typeinfo);
|
83
83
|
bool FXRbIsBorrowed(void* ptr);
|
84
|
-
bool FXRbSetInGC(const void* ptr, bool enabled);
|
85
|
-
bool FXRbIsInGC(const void* ptr);
|
86
84
|
|
87
85
|
// Wrapper around SWIG_TypeQuery()
|
88
86
|
swig_type_info *FXRbTypeQuery(const char *name);
|
@@ -369,7 +367,6 @@ template<class TYPE>
|
|
369
367
|
void FXRbCallVoidMethod_gvlcb(FXObject* recv,const char *func, TYPE& arg){
|
370
368
|
VALUE obj=FXRbGetRubyObj(recv,false);
|
371
369
|
FXASSERT(!NIL_P(obj));
|
372
|
-
FXASSERT(!FXRbIsInGC(recv));
|
373
370
|
rb_funcall(obj,rb_intern(func),1,to_ruby(arg));
|
374
371
|
FXRbUnregisterBorrowedRubyObj(&arg);
|
375
372
|
}
|
@@ -386,7 +383,6 @@ template<class TYPE>
|
|
386
383
|
void FXRbCallVoidMethod_gvlcb(const FXObject* recv, const char *func, TYPE& arg){
|
387
384
|
VALUE obj=FXRbGetRubyObj(recv,false);
|
388
385
|
FXASSERT(!NIL_P(obj));
|
389
|
-
FXASSERT(!FXRbIsInGC(recv));
|
390
386
|
rb_funcall(obj,rb_intern(func),1,to_ruby(arg));
|
391
387
|
FXRbUnregisterBorrowedRubyObj(&arg);
|
392
388
|
}
|
data/ext/fox16_c/markfuncs.cpp
CHANGED
@@ -53,19 +53,6 @@ void FXRbObject::markfunc(FXObject* obj){
|
|
53
53
|
FXTRACE((100,"%s::markfunc(%p)\n",obj?obj->getClassName():"FXRbObject",obj));
|
54
54
|
}
|
55
55
|
|
56
|
-
static void FXRbSetInGCParentsRecursive(FXWindow *window, bool enabled){
|
57
|
-
FXRbSetInGC( window, true );
|
58
|
-
if(window->getParent()) FXRbSetInGCParentsRecursive( window->getParent(), enabled );
|
59
|
-
}
|
60
|
-
|
61
|
-
static void FXRbSetInGCChildrenRecursive(FXWindow *window, bool enabled){
|
62
|
-
FXRbSetInGC( window, true );
|
63
|
-
for(FXWindow* child=window->getFirst(); child; child=child->getNext()){
|
64
|
-
FXRbSetInGCChildrenRecursive( child, enabled );
|
65
|
-
}
|
66
|
-
}
|
67
|
-
|
68
|
-
|
69
56
|
void FXRbObject::freefunc(FXObject* self){
|
70
57
|
if(self!=0){
|
71
58
|
// Unregister, but don't destroy, borrowed references
|
@@ -78,17 +65,6 @@ void FXRbObject::freefunc(FXObject* self){
|
|
78
65
|
FXASSERT(classname!=0);
|
79
66
|
FXASSERT(strlen(classname)>3);
|
80
67
|
if(classname[0]=='F' && classname[1]=='X' && classname[2]=='R' && classname[3]=='b'){
|
81
|
-
// FXWindow destructor calls recalc() and changeFocus() of it's parent window.
|
82
|
-
// Since these methods are routed back to Ruby code, but calling Ruby code from
|
83
|
-
// GC isn't a good idea, we mark the parent window as "in_gc", so that it will
|
84
|
-
// ignore recalc() and changeFocus() calls completely.
|
85
|
-
// The parent window should also be scheduled to be free'd. In the other case,
|
86
|
-
// the child window would have been marked as used.
|
87
|
-
if(self->isMemberOf(FXMETACLASS(FXWindow))){
|
88
|
-
FXWindow *window = dynamic_cast<FXWindow*>(self);
|
89
|
-
FXRbSetInGCParentsRecursive( window, true );
|
90
|
-
FXRbSetInGCChildrenRecursive( window, true );
|
91
|
-
}
|
92
68
|
delete self;
|
93
69
|
}
|
94
70
|
else{
|
data/lib/2.0/fox16_c.so
CHANGED
Binary file
|
data/lib/2.1/fox16_c.so
CHANGED
Binary file
|
data/lib/2.2/fox16_c.so
CHANGED
Binary file
|
data/lib/fox16/version.rb
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/x64-mingw32/zlib1.dll
CHANGED
Binary file
|
data/test/TC_FXTreeList.rb
CHANGED
@@ -67,12 +67,12 @@ class TC_FXTreeList < Fox::TestCase
|
|
67
67
|
@treeList.connect(SEL_INSERTED) { |sender, sel, ptr|
|
68
68
|
anItem = ptr
|
69
69
|
}
|
70
|
-
theItem = @treeList.appendItem(nil, "",
|
70
|
+
theItem = @treeList.appendItem(nil, FXTreeItem.new(""), true)
|
71
71
|
assert_same(theItem, anItem)
|
72
72
|
end
|
73
73
|
|
74
74
|
def test_SEL_DELETED
|
75
|
-
theItem = @treeList.appendItem(nil, "")
|
75
|
+
theItem = @treeList.appendItem(nil, FXTreeItem.new(""))
|
76
76
|
anItem = nil
|
77
77
|
@treeList.connect(SEL_DELETED) { |sender, sel, ptr|
|
78
78
|
anItem = ptr
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fxruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.32.pre1
|
5
5
|
platform: x64-mingw32
|
6
6
|
authors:
|
7
7
|
- Lyle Johnson
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-08-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mini_portile
|
@@ -1036,9 +1036,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
1036
1036
|
version: '0'
|
1037
1037
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
1038
1038
|
requirements:
|
1039
|
-
- - "
|
1039
|
+
- - ">"
|
1040
1040
|
- !ruby/object:Gem::Version
|
1041
|
-
version:
|
1041
|
+
version: 1.3.1
|
1042
1042
|
requirements: []
|
1043
1043
|
rubyforge_project:
|
1044
1044
|
rubygems_version: 2.4.8
|