Patches for ILU 2.0alpha11

Revised $Date: 1997/10/29 23:08:41 $ GMT

About Patches

Getting the "patch" program

The program "patch" is distributed from a number of places, and odds are you already have it on your system. If not, try ftp://gatekeeper.dec.com/pub/BSD/FreeBSD/FreeBSD-current/src/gnu/usr.bin/patch/ for the sources. On Windows platforms, there appears to be a version in the Win32 distribution of the GNU tools.

Applying a patch

To patch your sources, copy any patch listed below into a patch file. If you're going to apply more than one, apply them in order, and put each patch in a separate patch file. Then change your working directory to the top of the ILU source tree (ILUSRC), and use the command "patch -p", redirecting standard input to come from this file. For example, if you had put the ILU sources in /usr/local/ilu/src, and had put the patch in /usr/local/ilu/src/this-patch, you'd type
  % cd /usr/local/ilu/src
  % patch -p < /usr/local/ilu/src/this-patch
  [...various output from the patch program...]
  %
NOTE: On a fresh (unpatched) distribution, it usually works to just feed this entire patch.html file into the patch program, e.g. patch -l -p < patch.html WARNING: copying these files from a browser may produce problems with some patches due to a conversion of tabs to spaces. If you have a patch application fail, try specifying the -l switch to patch. Also, when ftp'ing this page, use binary transfer. On Windows, some patches may be reported as malformed if you transfer the file in ascii mode.

Actual Patches


  • An automatic buffer in the C stubber was being returned from a function. This could cause a variety of problems depending on the platform. Patch courtesy of Martin Cracauer!

    *** stubbers/c/names.c.original	Sat Sep 27 20:46:30 1997
    --- stubbers/c/names.c	Sat Sep 27 20:46:47 1997
    ***************
    *** 270,276 ****
        string n;
      
        if ((n = name_lang_name (type->name, "C-typecode")) == NULL) {
    !     char buf[ 500 ];
          char *tname;
      
          tname = c_type_name(type);
    --- 270,276 ----
        string n;
      
        if ((n = name_lang_name (type->name, "C-typecode")) == NULL) {
    !     static char buf[ 500 ];
          char *tname;
      
          tname = c_type_name(type);
    

  • IDL files that include other idl files can cause a stubber to core dump. Thanks to Ted Phelps and Martin Loewis! (Note that if you for some reason rerun bison on the idlparser.y file, it's that file where you should change the #define for HAVE_SCOPING)

    *** stubbers/idl/idlparser.c.orig Thu Sep 25 14:35:55 1997
    --- stubbers/idl/idlparser.c	Mon Sep 29 10:47:43 1997
    ***************
    *** 79,85 ****
      
      /* tunable parameters. For 2.0a10 compatibility, all should be 0 */
      #define LOCAL_TYPES_HAVE_REP_IDS  0
    ! #define HAVE_SCOPING              0
      #define HAVE_STRNDUP              0
      
      /* Make the Bison parser produce better error messages */
    --- 79,85 ----
      
      /* tunable parameters. For 2.0a10 compatibility, all should be 0 */
      #define LOCAL_TYPES_HAVE_REP_IDS  0
    ! #define HAVE_SCOPING              1
      #define HAVE_STRNDUP              0
      
      /* Make the Bison parser produce better error messages */
    
    *** stubbers/parser/util.c.orig	Thu Sep 25 14:29:52 1997
    --- stubbers/parser/util.c	Mon Sep 29 10:57:02 1997
    ***************
    *** 80,86 ****
            fprintf (stderr, "Couldn't find interface \"%s\".\n", s->name);
            exit(1);
          }
    !   else
          fprintf (info->file, ",\n%s and \"%s\" of %s", info->prefix, i->filename, ModTime(i->filename));
      }
      
    --- 80,86 ----
            fprintf (stderr, "Couldn't find interface \"%s\".\n", s->name);
            exit(1);
          }
    !   if (i->filename)
          fprintf (info->file, ",\n%s and \"%s\" of %s", info->prefix, i->filename, ModTime(i->filename));
      }
    
    

  • On Win32, the makefile for the Java runtime using Javasoft was missing a directory specifier when building in 'Release' mode. Thanks to Jeff Bauer!

    *** runtime/java/ilujsoft.mak.orig	Thu Sep 25 14:31:46 1997
    --- runtime/java/ilujsoft.mak	Mon Sep 29 17:29:58 1997
    ***************
    *** 477,483 ****
      !IF  "$(CFG)" == "Win32 Release"
      
      DEP_CPP_ILUJA=\
    ! 	"\runtime\java\build\xerox_ilu_ilucall.h"\
      	"$(ILUSRC)\runtime\java\build\xerox_ilu_iluclassrep.h"\
      	"$(ILUSRC)\runtime\java\build\xerox_ilu_ilugcclient.h"\
      	"$(ILUSRC)\runtime\java\build\xerox_ilu_ilumethodrep.h"\
    --- 477,483 ----
      !IF  "$(CFG)" == "Win32 Release"
      
      DEP_CPP_ILUJA=\
    ! 	"$(ILUSRC)\runtime\java\build\xerox_ilu_ilucall.h"\
      	"$(ILUSRC)\runtime\java\build\xerox_ilu_iluclassrep.h"\
      	"$(ILUSRC)\runtime\java\build\xerox_ilu_ilugcclient.h"\
      	"$(ILUSRC)\runtime\java\build\xerox_ilu_ilumethodrep.h"\
    

  • The Imakefile for the Java runtime was replacing rather than adding to the CLASSPATH environment variable, causing javac errors for some folks. Thanks to Martin Kaul!

    *** runtime/java/Imakefile.orig	Thu Sep 25 14:31:32 1997
    --- runtime/java/Imakefile	Tue Sep 30 09:28:51 1997
    ***************
    *** 34,40 ****
      all:: compiled extraSources								@@\
      											@@\
      compiled : sources									@@\
    ! 	CLASSPATH="$(JAVA_CLASS_DIR)"; export CLASSPATH ; $(JAVAC) -g -d "$(JAVA_CLASS_DIR)" sources @@\
      											@@\
      install:: compiled									@@\
      	@sh -c 'for i in compiled;  do  \						@@\
    --- 34,40 ----
      all:: compiled extraSources								@@\
      											@@\
      compiled : sources									@@\
    ! 	CLASSPATH="$(JAVA_CLASS_DIR):$(CLASSPATH)"; export CLASSPATH ; $(JAVAC) -g -d "$(JAVA_CLASS_DIR)" sources @@\
      											@@\
      install:: compiled									@@\
      	@sh -c 'for i in compiled;  do  \						@@\
    ***************
    *** 60,67 ****
      											@@\
      stubfiles : className.java								@@\
      	$(RM) $@									@@\
    ! 	CLASSPATH="$(JAVA_CLASS_DIR)"; export CLASSPATH ; $(JAVAH) -d stubdir -stubs packagePrefix.className @@\
    ! 	CLASSPATH="$(JAVA_CLASS_DIR)"; export CLASSPATH ; $(JAVAH) -d stubdir packagePrefix.className	@@\
      											@@\
      CleanTarget(stubfiles)
      
    --- 60,67 ----
      											@@\
      stubfiles : className.java								@@\
      	$(RM) $@									@@\
    ! 	CLASSPATH="$(JAVA_CLASS_DIR):$(CLASSPATH)"; export CLASSPATH ; $(JAVAH) -d stubdir -stubs packagePrefix.className @@\
    ! 	CLASSPATH="$(JAVA_CLASS_DIR):$(CLASSPATH)"; export CLASSPATH ; $(JAVAH) -d stubdir packagePrefix.className	@@\
      											@@\
      CleanTarget(stubfiles)
      
    ***************
    *** 78,84 ****
      											@@\
      stubfile : className.java								@@\
      	$(RM) $@									@@\
    ! 	CLASSPATH="$(JAVA_CLASS_DIR)"; export CLASSPATH ; $(JAVAH) -d stubdir packagePrefix.className	@@\
      											@@\
      CleanTarget(stubfile)
      
    --- 78,84 ----
      											@@\
      stubfile : className.java								@@\
      	$(RM) $@									@@\
    ! 	CLASSPATH="$(JAVA_CLASS_DIR):$(CLASSPATH)"; export CLASSPATH ; $(JAVAH) -d stubdir packagePrefix.className	@@\
      											@@\
      CleanTarget(stubfile)
      
    ***************
    *** 93,99 ****
      											@@\
      stubfile : fileName								@@\
      	$(RM) $@									@@\
    ! 	CLASSPATH="$(JAVA_CLASS_DIR)"; export CLASSPATH ; $(JAVAH) -d stubdir className	@@\
      											@@\
      CleanTarget(stubfile)
      
    --- 93,99 ----
      											@@\
      stubfile : fileName								@@\
      	$(RM) $@									@@\
    ! 	CLASSPATH="$(JAVA_CLASS_DIR):$(CLASSPATH)"; export CLASSPATH ; $(JAVAH) -d stubdir className	@@\
      											@@\
      CleanTarget(stubfile)
      
    ***************
    *** 129,138 ****
       */
      
      make.gnh:	ilunative.in
    ! 	CLASSPATH="$(JAVA_CLASS_DIR)"; export CLASSPATH ; $(JAVAC) -d "$(JAVA_CLASS_DIR)" gnh.java
      	rm -f ilunative.h
      	rm -f ilunative.c
    ! 	CLASSPATH="$(JAVA_CLASS_DIR)"; export CLASSPATH ; $(JAVA_HOME)/bin/java xerox.ilu.tools.gnh -oni ilunative.in
      	rm -f $(JAVA_CLASS_DIR)/xerox/ilu/tools/gnh.class
      	touch make.gnh
      
    --- 129,138 ----
       */
      
      make.gnh:	ilunative.in
    ! 	CLASSPATH="$(JAVA_CLASS_DIR):$(CLASSPATH)"; export CLASSPATH ; $(JAVAC) -d "$(JAVA_CLASS_DIR)" gnh.java
      	rm -f ilunative.h
      	rm -f ilunative.c
    ! 	CLASSPATH="$(JAVA_CLASS_DIR):$(CLASSPATH)"; export CLASSPATH ; $(JAVA_HOME)/bin/java xerox.ilu.tools.gnh -oni ilunative.in
      	rm -f $(JAVA_CLASS_DIR)/xerox/ilu/tools/gnh.class
      	touch make.gnh
      
    

  • Use of the C++ 'class' keyword in one of the C header files can cause problems when attempting to mix C and C++ code. Thanks to Ole Vilmann!

    *** runtime/c/ilucstub.h.orig	Thu Sep 25 14:32:01 1997
    --- runtime/c/ilucstub.h	Wed Oct  1 11:10:04 1997
    ***************
    *** 381,387 ****
      } _ILU_C_ParmDesc;
      
      ILU_RUNTIME_PUBLIC void
    !   _ILU_C_VectorCall (ilu_Class class, ilu_Method method,
      		     _ILU_C_ExceptionDescription *evec,
      		     ILU_C_Object *discriminant,
      		     ILU_C_ENVIRONMENT *status,
    --- 381,387 ----
      } _ILU_C_ParmDesc;
      
      ILU_RUNTIME_PUBLIC void
    !   _ILU_C_VectorCall (ilu_Class pclass, ilu_Method method,
      		     _ILU_C_ExceptionDescription *evec,
      		     ILU_C_Object *discriminant,
      		     ILU_C_ENVIRONMENT *status,
    

  • C stubber was generating incorrect Sequence Pop code for sequences whose elements were not normally pointers (e.g. longs). Thanks to Robert Wamble!

    *** stubbers/c/cheaders.c.orig	Thu Sep 25 14:29:54 1997
    --- stubbers/c/cheaders.c	Wed Oct  1 15:27:45 1997
    ***************
    *** 866,872 ****
            fprintf (c->file, "void %s_Every (%s *h, void (*f)(%s%s, void *), void *);\n", tn, tn, st, nr ? "" : "*");
            fprintf (c->file, "void %s_Append (%s *h, %s item);\n", tn, tn, st);
            fprintf (c->file, "void %s_Push (%s *h, %s item);\n", tn, tn, st);
    !       fprintf (c->file, "void %s_Pop (%s *h, %s item);\n", tn, tn, st);
            fprintf (c->file, "CORBA_unsigned_long %s_Length (%s *);\n", tn, tn);
            fprintf (c->file, "%s * %s_Nth (%s *, CORBA_unsigned_long);\n", rtn, tn, tn);
            fprintf (c->file, "%s * %s_Create (CORBA_unsigned_long /* size */, %s %s /* init val */);\n", tn, tn, st, (nr) ? "" : "*");
    --- 866,872 ----
            fprintf (c->file, "void %s_Every (%s *h, void (*f)(%s%s, void *), void *);\n", tn, tn, st, nr ? "" : "*");
            fprintf (c->file, "void %s_Append (%s *h, %s item);\n", tn, tn, st);
            fprintf (c->file, "void %s_Push (%s *h, %s item);\n", tn, tn, st);
    !       fprintf (c->file, "void %s_Pop (%s *h, %s %sitem);\n", tn, tn, st, (nr) ? "" : "*");
            fprintf (c->file, "CORBA_unsigned_long %s_Length (%s *);\n", tn, tn);
            fprintf (c->file, "%s * %s_Nth (%s *, CORBA_unsigned_long);\n", rtn, tn, tn);
            fprintf (c->file, "%s * %s_Create (CORBA_unsigned_long /* size */, %s %s /* init val */);\n", tn, tn, st, (nr) ? "" : "*");
    *** stubbers/c/code.c.orig	Thu Sep 25 14:29:55 1997
    --- stubbers/c/code.c	Wed Oct  1 15:27:29 1997
    ***************
    *** 1960,1969 ****
      	    rtn);
          fprintf(f, "}\n\n");
      
    !     fprintf(f, "void %s_Pop (%s *h, %s item)\n{\n", tn, tn, st);
          fprintf(f, "  _ILU_C_PopGeneric (%s, %s, sizeof(%s));\n}\n\n",
      	    "(ILU_C_Sequence) h",
    ! 	    (hasReferent) ? "(char *) item" : "(char *) &item",
      	    rtn);
      
          fprintf(f, "CORBA_unsigned_long %s_Length (%s *h)\n{\n", tn, tn);
    --- 1960,1969 ----
      	    rtn);
          fprintf(f, "}\n\n");
      
    !     fprintf(f, "void %s_Pop (%s *h, %s %sitem)\n{\n", tn, tn, st, (hasReferent) ? "" : "*");
          fprintf(f, "  _ILU_C_PopGeneric (%s, %s, sizeof(%s));\n}\n\n",
      	    "(ILU_C_Sequence) h",
    ! 	    "(char *) item",
      	    rtn);
      
          fprintf(f, "CORBA_unsigned_long %s_Length (%s *h)\n{\n", tn, tn);
    

  • IIOP has problems working with ORBs which do not define the CODE_SET tag in their IOR, due to an uninitialized data structure. This should alleviate that problem.

    *** 1.149	1997/09/23 17:48:13
    --- runtime/kernel/iiop.c	1997/10/07 02:47:51
    ***************
    *** 522,527 ****
    --- 522,529 ----
        p->objKeyLen = 0;
        p->principal = NIL;
        p->principalLen = 0;
    +   p->short_char_codeset = ilu_IIOP_NATIVE_SHORT_CHAR_CODE_SET_ID;
    +   p->char_codeset = 0;
        return (p);
      }
      
    ***************
    *** 1725,1732 ****
      		*mstid = _ilu_Strdup(ior->type_id);
      	      stat = parse_ILU_Profile (&ior->Profile[i],
      					ih, sid, NIL, cinfo, cinfolen, err);
    ! 	      if (stat)
      		break;
      	    }
      	}
            if (! stat) {
    --- 1727,1739 ----
      		*mstid = _ilu_Strdup(ior->type_id);
      	      stat = parse_ILU_Profile (&ior->Profile[i],
      					ih, sid, NIL, cinfo, cinfolen, err);
    ! 	      if (stat) {
    ! 		if ((short_char_codeset != NIL) && (*short_char_codeset == 0))
    ! 		  *short_char_codeset = ilu_IIOP_NATIVE_SHORT_CHAR_CODE_SET_ID;
    ! 		if ((char_codeset != NIL) && (*char_codeset == 0))
    ! 		  *char_codeset = ilu_IIOP_NATIVE_CHAR_CODE_SET_ID;
      		break;
    + 	      };
      	    }
      	}
            if (! stat) {
    ***************
    *** 1754,1759 ****
    --- 1761,1769 ----
            /* XXX -- if no character codesets were specified, use defaults */
            if ((short_char_codeset != NIL) && (*short_char_codeset == 0))
      	*short_char_codeset = ilu_IIOP_NATIVE_SHORT_CHAR_CODE_SET_ID;
    +       /* XXX -- this is wrong; it should be 0, but that means that we should
    + 	 check all interfaces of the object being reified to see that they
    + 	 don't use wchar or wstring, and that's too expensive */
            if ((char_codeset != NIL) && (*char_codeset == 0))
      	*char_codeset = ilu_IIOP_NATIVE_CHAR_CODE_SET_ID;
      
    ***************
    *** 1799,1804 ****
    --- 1809,1818 ----
          {
            if (((short_char_codeset != ilu_IIOP_NATIVE_SHORT_CHAR_CODE_SET_ID) &&
      	   (codeset_err = ilu_iom_short_char_codeset)) ||
    + 	  /* XXX - this next clause is wrong; we should really allow a value
    + 	     of 0 as well, but that means we'd have to grovel over the interfaces
    + 	     of the object to ensure they don't use wchar or wstring, and that's
    + 	     too painful. */
      	  ((char_codeset != ilu_IIOP_NATIVE_CHAR_CODE_SET_ID) &&
      	   (codeset_err = ilu_iom_char_codeset))) {
      	ilu_free(sid);
    ***************
    *** 2051,2056 ****
    --- 2065,2074 ----
        ilu_free(p);
        if (((short_char_codeset != ilu_IIOP_NATIVE_SHORT_CHAR_CODE_SET_ID) &&
             (codeset_err = ilu_iom_short_char_codeset)) ||
    +       /* XXX - this next clause is wrong; we should really allow a value
    + 	 of 0 as well, but that means we'd have to grovel over the interfaces
    + 	 of the object to ensure they don't use wchar or wstring, and that's
    + 	 too painful. */
            ((char_codeset != ilu_IIOP_NATIVE_CHAR_CODE_SET_ID) &&
             (codeset_err = ilu_iom_char_codeset))) {
          ilu_free(sid);
    

  • Collection of a Collectible object in Python when running threaded could cause the interpreter lock to remain held, blocking further progress.

    *** runtime/python/iluPrmodule.c.orig	Thu Sep 25 14:32:03 1997
    --- runtime/python/iluPrmodule.c	Thu Oct 23 13:54:20 1997
    ***************
    *** 1520,1526 ****
      }
      
      static void
    !   setupGCCleanupAlarm (void)
      {
        if (gcAlarmSet)
          return;
    --- 1520,1526 ----
      }
      
      static void
    !   setupGCCleanupAlarm (ilu_boolean b_calling_from_kernel)
      {
        if (gcAlarmSet)
          return;
    ***************
    *** 1531,1537 ****
        _ilu_Assert(gcAlarm != ILU_NIL, "failed to create GC alarm");
      
      #ifdef ILU_PYTHON_THREADS
    !   if (ilupython_threaded_operation)
          {
            CALL_KERNEL(ilupython_threaded_operation, ilu_SetAlarm(gcAlarm, ilu_FineTime_Add(ilu_FineTime_Now(), plus1Minute), bootstrapAlarm, (void *)&gc_alarm_rock));
          }
    --- 1531,1543 ----
        _ilu_Assert(gcAlarm != ILU_NIL, "failed to create GC alarm");
      
      #ifdef ILU_PYTHON_THREADS
    !   /* if we're running threaded and we're Not calling from the kernel i.e. calling from ilumod_Delete, 
    !      we know we should be (un)grabbing the interpreter lock via the CALL_KERNEL
    !      macro.  If we are calling from the kernel, i.e. from trackKernelInterest,
    !      we don't want to use CALL_KERNEL because it will release the lock, do the call 
    !      and then grab the lock, preventing anything else from using the interpreter.
    !      */
    !   if (ilupython_threaded_operation && !b_calling_from_kernel)
          {
            CALL_KERNEL(ilupython_threaded_operation, ilu_SetAlarm(gcAlarm, ilu_FineTime_Add(ilu_FineTime_Now(), plus1Minute), bootstrapAlarm, (void *)&gc_alarm_rock));
          }
    ***************
    *** 1609,1615 ****
      		gcList = PyList_New(1);
      
      	      addObjToGCList (gcList, (PyObject *) inst);
    ! 	      setupGCCleanupAlarm();
      	    }
      	  Py_DECREF(inst);
      	  /*
    --- 1615,1621 ----
      		gcList = PyList_New(1);
      
      	      addObjToGCList (gcList, (PyObject *) inst);
    ! 	      setupGCCleanupAlarm(ilu_TRUE);
      	    }
      	  Py_DECREF(inst);
      	  /*
    ***************
    *** 2208,2214 ****
      	gcList = PyList_New(1);
      
            addObjToGCList (gcList, (PyObject *) inst);
    !       setupGCCleanupAlarm();
          }
      #ifdef ILU_OLD_PYTHON_GC_BEHAVIOR
        Py_DECREF(inst);
    --- 2214,2220 ----
      	gcList = PyList_New(1);
      
            addObjToGCList (gcList, (PyObject *) inst);
    !       setupGCCleanupAlarm(ilu_FALSE);
          }
      #ifdef ILU_OLD_PYTHON_GC_BEHAVIOR
        Py_DECREF(inst);
    

  • It's possible (and legal) for iluparser_GetProgramName() to return NIL. But the stubbers don't like that. This patches fixes that dislike.

    *** 1.21	1996/11/08 03:56:12
    --- stubbers/lisp/lisp.c	1997/10/24 02:30:10
    ***************
    *** 213,219 ****
        char **filename;
        extern Interface GetInterface(string, string);
      
    !   ProgramName = iluparser_GetProgramName(av[0]);
      
        if (ac < 2)
          {
    --- 213,220 ----
        char **filename;
        extern Interface GetInterface(string, string);
      
    !   if ((ProgramName = iluparser_GetProgramName(av[0])) == NULL)
    !     ProgramName = av[0];
      
        if (ac < 2)
          {
    *** 1.13	1997/08/30 00:38:32
    --- stubbers/python/isl2python.c	1997/10/24 02:29:15
    ***************
    *** 249,255 ****
      	int	optind	= 1;
      	char *	pathDir = NULL;
      
    ! 	programName = iluparser_GetProgramName(argv[0]);
      
      	while (optind < argc && argv[optind][0] == '-')
      	{
    --- 249,256 ----
      	int	optind	= 1;
      	char *	pathDir = NULL;
      
    ! 	if ((programName = iluparser_GetProgramName(argv[0])) == NULL)
    ! 	  programName = argv[0];
      
      	while (optind < argc && argv[optind][0] == '-')
      	{
    

  • The OMG has decided to retroactively change the TypeID of the CosNaming type, so we follow suit:

    *** 1.1	1997/08/05 06:17:40
    --- etc/CosNaming/CosNaming.idl	1997/10/24 03:00:29
    ***************
    *** 13,16 ****
      
      
      module CosNaming {
      
    --- 13,18 ----
      
    + 
    + #pragma prefix	"omg.org"
      
      module CosNaming {
      
    

  • runtime/guile/Imakefile used ILUHOME where it meant DESTDIR...

    *** 1.6	1997/09/16 23:50:47
    --- runtime/guile/Imakefile	1997/10/24 02:09:40
    ***************
    *** 21,27 ****
      
      NormalObjectRule()
      
    ! MkdirTarget($(ILUHOME)/guile)
      
      ILU_SCHEME_LIB = libilu-guile.a
      
    --- 21,27 ----
      
      NormalObjectRule()
      
    ! MkdirTarget($(DESTDIR)/guile)
      
      ILU_SCHEME_LIB = libilu-guile.a
      
    

  • It's a good idea to make the directories before installing in them...

    *** 1.35	1997/09/10 01:42:43
    --- examples/test1/Imakefile	1997/10/24 03:48:22
    ***************
    *** 2,8 ****
      /* Last edited by Mike Spreitzer June 5, 1996 5:44 pm PDT */
      
      all:: Test1.isl
      
      #ifdef ADD_COMMONLISP_LANGUAGE
      load-lisp-example.lisp : load-lisp-example.lisp.dist
      	-rm -f load-lisp-example.lisp
    --- 2,11 ----
      /* Last edited by Mike Spreitzer June 5, 1996 5:44 pm PDT */
      
      all:: Test1.isl
      
    + MkdirTarget($(DESTDIR)/examples)
    + MkdirTarget($(DESTDIR)/examples/test1)
    + 
      #ifdef ADD_COMMONLISP_LANGUAGE
      load-lisp-example.lisp : load-lisp-example.lisp.dist
      	-rm -f load-lisp-example.lisp
    ***************
    *** 13,21 ****
      InstallRO(client.lisp server.lisp load-lisp-example.lisp, $(DESTDIR)/examples/test1)
      CleanTarget(load-lisp-example.lisp)
      #endif
    - 
    - MkdirTarget($(DESTDIR)/examples)
    - MkdirTarget($(DESTDIR)/examples/test1)
      
      InstallRO(Test1.isl Test2.isl Test3.isl, $(DESTDIR)/examples/test1)
      InstallRO(clnt.c clnt.h clntu.c clntw.c srvrw.c srvr.c srvr.h srvru.c test1srv.key test1srv.crt, $(DESTDIR)/examples/test1)
    --- 16,21 ----
    

  • Python Threaded GC needed to call threadsafe alarm setup.

    *** runtime/python/iluPrmodule.c.orig	Mon Oct 27 10:35:06 1997
    --- runtime/python/iluPrmodule.c	Mon Oct 27 10:51:41 1997
    ***************
    *** 1537,1546 ****
           we don't want to use CALL_KERNEL because it will release the lock, do the call 
           and then grab the lock, preventing anything else from using the interpreter.
           */
    !   if (ilupython_threaded_operation && !b_calling_from_kernel)
    !     {
    !       CALL_KERNEL(ilupython_threaded_operation, ilu_SetAlarm(gcAlarm, ilu_FineTime_Add(ilu_FineTime_Now(), plus1Minute), bootstrapAlarm, (void *)&gc_alarm_rock));
          }
        else
      #endif /* ILU_PYTHON_THREADS */
          {
    --- 1537,1550 ----
           we don't want to use CALL_KERNEL because it will release the lock, do the call 
           and then grab the lock, preventing anything else from using the interpreter.
           */
    !   if (ilupython_threaded_operation){
    !     if (!b_calling_from_kernel) {
    ! 	CALL_KERNEL(ilupython_threaded_operation, 
    ! 		    ilu_SetAlarm(gcAlarm, ilu_FineTime_Add(ilu_FineTime_Now(), plus1Minute), bootstrapAlarm, (void *)&gc_alarm_rock));
          }
    +     else 
    +       ilu_SetAlarm (gcAlarm, ilu_FineTime_Add(ilu_FineTime_Now(), plus1Minute), bootstrapAlarm, (void *)&gc_alarm_rock);
    +   }
        else
      #endif /* ILU_PYTHON_THREADS */
          {
    

  • From: Joachim Achtzehnter (joachim@mercury.bc.ca)

    When the reply of the first method call of an ILU server program that uses the IIOP protocol requires marshalling of a NIL object the program enters an infinite sleep loop.

    This happens because the function FindIORForObject in iiop.c returns nil when the ObjectIors variable is nil. When called with a NIL object it can happen that this variable is nil, but it should still return &NilObjectIOR instead of nil.

    Here is a patch that fixes the bug:

    *** runtime/kernel/iiop.c	1997/10/07 22:57:51	1.6
    --- runtime/kernel/iiop.c	1997/10/29 21:21:04	1.7
    ***************
    *** 2102,2111 ****
      {
        iorhash ior;
      
    -   if (ObjectIors == NIL)
    -     return NIL;
        if (h == NIL)
          return &NilObjectIOR;
        if ((ior = (iorhash) ilu_hash_FindInTable(ObjectIors, h)) == NIL)
          return NIL;
        if ((h->ob_server != ior->s) OR
    --- 2102,2111 ----
      {
        iorhash ior;
      
        if (h == NIL)
          return &NilObjectIOR;
    +   if (ObjectIors == NIL)
    +     return NIL;
        if ((ior = (iorhash) ilu_hash_FindInTable(ObjectIors, h)) == NIL)
          return NIL;
        if ((h->ob_server != ior->s) OR
    

  • End of patches