I mailed about a week ago about an incompatibility 
of NSInvocation in GNUstep and Apple's WebObjects.

This mail contains a few files

1 - A patch for gnustep-base.
        See ChangeLog below for what is changed.
        

2 - Patch for InvokeTarget in the tests project, to support new tests

3 - New file greg test file for the NSInvocation


PROBLEM DESCRIPTION
-------------------

A - NSInvocations in GNUstep do not retain their return values.
    In Apple's WebObjects they are retained.  
    This is usefull if you use NSInvocations to communicate between
    threads.   


B - The logic for the _validReturn flag logic is broken.  See the testcases.
    But basically the flag is set to YES after the first invocation and 
    never reset to NO.

The Patch below fixes both of them. 
Note that I have not tested the patch for GSFFIInvocation, because I 
use GSFFCallIncocation.

Changelog for these fixes:

2003-02-04  Willem Rein Oudshoorn  <[EMAIL PROTECTED]>

        * Headers/gnustep/base/GSInvocation.h (CLEAR_RETURN_VALUE_IF_OBJECT): New 
macro, 
        if invocation returns object release it.
        (RETAIN_RETURN_VALUE): New macro, if invocation returns object release it.

        * Source/NSInvocation.m ([NSInvocation -dealloc]): Implement RELEASE return 
object
        ([NSInvocation -setReturnValue:]) Implement RETAIN/RELEASE on return object
        ([NSInvocation -invokeWithTarget:]): Implement RETAIN/RELEASE on return object,
        fixed  _validReturn flag setting

        * Source/GSFFIInvocation.m ([GSFFIInvocation -invokeWithTarget:]): 
        Fix _validReturn flag setting, Implement RETAIN/RELEASE on return object.

        * Source/GSFFCallInvocation.m ([GSFFCallInvocation -invokeWithTarget:]): 
        Fix _validReturn flag setting.  Implement RETAIN/RELEASE on return object.



NEW TESTS
---------

Test the fixes above.  Without the patch I get 3 FAILS in the new tests. 
2 of those tests belong to the bug described in B above. 
1 is a new test for the situation described in A.

Changelog for the patch and the new file:

2003-02-04  Willem Rein Oudshoorn  <[EMAIL PROTECTED]>

        * Resources/InvokeProxy.m ([InvokeTarget -returnIdButThrowException]): New 
method
        * NSInvocation/test01.scm: New file, containing simple
        retain/release and getting return value test



Wim Oudshoorn.


Attachment: base-NSInvocation-diff.bz2
Description: Patch for NSInvocation incompatibility

Attachment: tests-diff.bz2
Description: Diff for InvokeTarget to support new tests

Attachment: test01.scm.bz2
Description: New test cases for NSInvocation

_______________________________________________
Bug-gnustep mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-gnustep

Reply via email to