Opened 13 years ago

Last modified 13 years ago

#75 new defect

Problems with multiple initialization of WGSS50.DLL

Reported by: dmik Owned by:
Priority: minor Milestone: general enhancement
Component: odin Version: 0.8.x
Severity: low Keywords:
Cc:

Description

It turns out that if one version of KERNEL32.DLL has already loaded and initialized WGSS50.DLL, then an attempt to initialize the same instance of WGSS50.DLL from another version (located in a separate file and loaded in LIBPATHSTRICT=T mode) leads to weird behavior. This includes:

  1. A hang within DosLoadModule(KERNEL32.DLL) in the process loading the second version of KERNEL32.DLL.
  2. A hang in the process that loaded the first version of KERNEL32.DLL and originally initialized WGSS50.DLL, after another process (hung in DosLoadModule()) is killed.

Change History (2)

comment:1 by dmik, 13 years ago

An easy way to reproduce the problem is to do the following:

  1. Place one set of Odin DLLs + WGSS50.DLL to LIBPATH.
  2. Start some application using them, e.g. OpenJDK.
  3. Place another set of Odin DLLs in some directory making sure there is NO another copy of WGSS50.DLL in there.
  4. Set BEGINLIBPAH=<dir_from_step_3> and LIBPATHSTRICT=T.
  5. Start another application using Odin from the environment created in step 4, e.g. Firefox 8 with the Flash wrapper 0.3.1 or above.

Flash will not work (will behave as if there is no plugin installed). Closing Firefox will make the OpenJDK process hang.

A simple workaround is to put a separate copy of WGSS50.DLL to BEGINLIBPATH along with the second set of Odin DLLs. This causes OS/2 to load a separate WGSS50 instance and all goes fine then.

comment:2 by dmik, 13 years ago

Milestone: general enhancement

Note that WGSS50 itself uses KERNEL32/USER32/GDI32 so that the problem may come from the fact that fixups in WGSS50 already point to the first KERNEL32 module when the second one attempts to initialize it.

Note also that since this situation is unlikely in a normal environment (and has an easy workaround), the priority is considered to be minor.

Note: See TracTickets for help on using tickets.