svn commit: r339807 - in head/lang/libobjc2: . files

David Chisnall theraven at FreeBSD.org
Wed Jan 15 19:10:17 UTC 2014


Author: theraven
Date: Wed Jan 15 19:10:16 2014
New Revision: 339807
URL: http://svnweb.freebsd.org/changeset/ports/339807
QAT: https://qat.redports.org/buildarchive/r339807/

Log:
  Backport bug fix from r37605 upstream.  This fixes crashing when
  Objective-C++ programs use Objective-C types in static constructors.
  
  Approved by:	bapt (mentor)

Added:
  head/lang/libobjc2/files/
  head/lang/libobjc2/files/patch-arc.m   (contents, props changed)
Modified:
  head/lang/libobjc2/Makefile

Modified: head/lang/libobjc2/Makefile
==============================================================================
--- head/lang/libobjc2/Makefile	Wed Jan 15 19:00:14 2014	(r339806)
+++ head/lang/libobjc2/Makefile	Wed Jan 15 19:10:16 2014	(r339807)
@@ -3,6 +3,7 @@
 
 PORTNAME=	libobjc2
 PORTVERSION=	1.7
+PORTREVISION=	1
 CATEGORIES=	lang devel gnustep
 MASTER_SITES=	http://download.gna.org/gnustep/
 

Added: head/lang/libobjc2/files/patch-arc.m
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/libobjc2/files/patch-arc.m	Wed Jan 15 19:10:16 2014	(r339807)
@@ -0,0 +1,30 @@
+--- ./arc.m.orig	2013-03-12 08:51:59.000000000 +0000
++++ ./arc.m	2014-01-13 15:04:54.000000000 +0000
+@@ -219,15 +219,18 @@
+ 		}
+ 		else
+ 		{
+-			[AutoreleasePool class];
+-			useARCAutoreleasePool = class_respondsToSelector(AutoreleasePool,
+-			                                                 SELECTOR(_ARCCompatibleAutoreleasePool));
+-			NewAutoreleasePool = class_getMethodImplementation(object_getClass(AutoreleasePool),
+-			                                                   SELECTOR(new));
+-			DeleteAutoreleasePool = class_getMethodImplementation(AutoreleasePool,
+-			                                                      SELECTOR(release));
+-			AutoreleaseAdd = class_getMethodImplementation(object_getClass(AutoreleasePool),
+-			                                               SELECTOR(addObject:));
++			useARCAutoreleasePool = (0 != class_getInstanceMethod(AutoreleasePool,
++			                                                      SELECTOR(_ARCCompatibleAutoreleasePool)));
++			if (!useARCAutoreleasePool)
++			{
++			        [AutoreleasePool class];
++			        NewAutoreleasePool = class_getMethodImplementation(object_getClass(AutoreleasePool),
++			                                                           SELECTOR(new));
++			        DeleteAutoreleasePool = class_getMethodImplementation(AutoreleasePool,
++			                                                              SELECTOR(release));
++			        AutoreleaseAdd = class_getMethodImplementation(object_getClass(AutoreleasePool),
++			                                                       SELECTOR(addObject:));
++			}
+ 		}
+ 	}
+ }


More information about the svn-ports-all mailing list