Closed
Bug 11159
Opened 25 years ago
Closed 24 years ago
libtimer_gtk_s is causing link problems
Categories
(Core :: Networking, defect, P3)
Tracking
()
VERIFIED
FIXED
M16
People
(Reporter: colin, Assigned: pavlov)
References
Details
This has been discussed to some extent in the netlib newsgroup, in a posting started on 7/19/99 and titled "nsNeckoUtil.cpp link problems". But there was no resolution, and so I'm entering this report so that the problem can be formally tracked. Basically there are two problems with libneckoutil_s. 1) Some other libraries use functions from neckoutil_s but do NOT link with neckoutil_s. This practice seems to be acceptable on some UNIX platforms (the ones used by the Mozilla developers, no doubt), but is not acceptable on other "UNIX-like" platforms such as Beos and OpenVMS. On these platforms the creation of these other libraries fail because of the missing neckoutil functions. I understand that on Linux this all works because the main program (viewer or apprunner) is linked with neckoutil_s and so at run time the missing functions can be found. This technique doesn't work on Beos and OpenVMS where functions have to be located at link time, not at run time. 2) libneckoutil_s is linked into several .so files. This means (at least on OpenVMS) that I end up with several copies of the contents of neckoutil in my address space. This is a waste at best and an bug at worst (imagine if neckoutil has static data). In a Mozilla world of .so files everywhere, why do we have neckoutil created as a static library and then linked into multiple .so files? Not only does this seem to be against the Mozilla tradition of modularizing everything, it just plain doesn't work on some platforms! I would like to suggest that the contents of libneckoutil_s either become a part of some other existing .so file (libnecko comes to mind) or form their own new .so file (maybe libneckoutil). OK, that's libneckoutil_s. Now what about libtimer_gtk_s? That falls into exactly the same category as libneckoutil. Do I need to submit a separate report for that one?
Comment 3•25 years ago
|
||
Colin, The reason we make neckoutil_s was to provide convenience functions that the calling dll/dso could use that would fail if the called library (in this case necko.dll) was not available (i.e. fail at runtime, rather than link time). neckoutil_s shouldn't have any static data. The function are really just wrappers for calling the service manager to get the IOService, and then calling its methods. I guess the build rules need to change for OpenVMS and BeOS -- either that or we need a completely new strategy. I'm going to assign this back to you since I don't know what to do with it, and I'm not set up to hack OpenVMS and BeOS makefiles. Warren
Assignee: warren → colin
Reporter | ||
Comment 4•25 years ago
|
||
I'm out until 8/12. I'll take a look when I get back.
Warren, please check out my articles that Colin mentioned in n.p.m.netlib. The problem is not solveable by changing the build. It's the runtime environment that doesn't allow the kind of things that are done. The current setup simply assumes that when some random shared library references "NS_NewURI" this symbols will be magically found in a global symbol table. Well, no such thing as a global symbol table exists for BeOS or OpenVMS! It can't be fixed by a build option! I have worked around the problem under BeOS with a very ugly hack that (among other shortcomings) won't allow embedding. The new libneckoutil_s and libtimer_XXX_s haven't removed dependencies, they have HIDDEN the dependencies in implementation defined behaviour!
Reporter | ||
Updated•25 years ago
|
Assignee: colin → warren
Reporter | ||
Comment 6•25 years ago
|
||
Warren, This is "fixable" on OpenVMS and BeOS, but its really just hacking around the real problem. In my mind the real problem is that you are creating dll/dso files with explicit references to other functions which are NOT part of any other dll/dso, and then relying on the fact that viewer and apprunner both link in the missing functions. This is not modular. Not in my mind, anyway. I understand what you are saying about these being "convenience functions", but that doesn't address the fact that this code is not modular or componentized, and anything other than Windows, Mac or UNIX is likely to have a problem with this. While I believe I can work around this problem for VMS (by explicitely including the contents of neckoutil_s into each dll/dso that uses it), the work around is ugly. It sounds like the BeOS workaround places serious restrictions on Mozilla. And the next OS to which Mozilla is ported may not have any workaround possible. So, while I'm willing to change the Makefiles so that Necko builds on OpenVMS, it really doesn't seem like the right solution. Surely this is a general "problem" with using components. Before you call a function, you must first get its address. I don't see the rest of Mozilla littered with "convenience functions" and static library files. If you really want me to hack it for a platform-specific OpenVMS solution, then assign the bug back to me. But I'm sure the BeOS folks won't be too happy, nor the next OS that stumbles onto this "convenience". Colin.
Updated•25 years ago
|
Status: NEW → ASSIGNED
Comment 7•25 years ago
|
||
I just talked with brendan and he said I should give an update. I intend to see if we can eliminate the nsNeckoUtil glue code altogether. It will contribute a little bloat to the other dlls, but should eliminate this problem.
Reporter | ||
Comment 8•25 years ago
|
||
A few of us (Ramiro and myself for starters) have been working to update the makefiles to link neckoutil_s and timer_s into all the places that need them. I *think* that with the final updates I made this weekend, we are all set. At least on OpenVMS we are. We should check with the other "non-standard" platforms.
Spoke with warren at bug triage today. Not an M10 blocker...moving to M11.
Comment 10•25 years ago
|
||
In news://news.mozilla.org/beard-84985E.12074908101999%40news.mozilla.org, beard@netscape.com wrote: We can use NS_New* if they are inline functions in header files, that end up being short hand for progID-based calls to nsComponentManager::Create(). And, for TRUE modularity, nsComponentManager::Create shouldn't be used, instead nsIComponentManager interface references should be weakly held by each nsIModule in the system. Then, each component would have ZERO static dependencies on the other components in our system. - Patrick Why don't we just cut the static dependencies out altogether, as Patrick suggests? /be
Comment 11•25 years ago
|
||
I agree. Let's make neckoutil_s go away altogether. The thing I was waiting on before doing this was a response from dp to my question about grabbing services during GetClassObject, and whether this would prohibit unloading. He said that there are other reasons unloading is broken now anyway, so go for it.
Updated•25 years ago
|
Target Milestone: M11 → M12
Comment 12•25 years ago
|
||
Not essential for m11.
Reporter | ||
Comment 13•25 years ago
|
||
This has already been pushed out of M9 and M10, and now you're pushing it out of M11 into M12. Will this kind of work be allowed in M12? I thought M12 was going to be "critical fixes only". If this work is going to be done, doesn't it need doing now, while its still relatively easy to get stuff checked in. And if its not going to get done, shouldn't the bug just be closed? Just trying to be realistic....
Comment 14•25 years ago
|
||
I've got these changes sitting on a branch (no_neckoutil_branch, relative to the base tag no_neckoutil_base), but after committing them and building, the browser window doesn't come up. We just sit there in the event loop. I need to track down what the error is, and why it isn't getting reported.
Comment 15•25 years ago
|
||
I created a new branch today, no_neckoutil2_branch. This one works on windows and linux. Awaiting some mac assistance now.
Updated•25 years ago
|
Assignee: warren → pavlov
Status: ASSIGNED → NEW
Summary: libneckoutil_s and libtimer_gtk_s are causing link problems → libtimer_gtk_s is causing link problems
Comment 16•25 years ago
|
||
I just landed this branch. The remaining work now is for someone (else) to eliminate libtimer_gtk_s. On a related note: I believe that widget/timer should be pulled out of widget and either into a top-level directory, or into xpcom. This became apparent when I merged the libs and install build phases -- timer had to be built first, but the rest of widget had to be built later. Something to consider when trying to eliminate this library. I'm going to hand this off to Pavlov. Changing summary from: "libneckoutil_s and libtimer_gtk_s are causing link problems" to "libtimer_gtk_s is causing link problems"
Reporter | ||
Comment 17•25 years ago
|
||
The timer code was fixed by ramiro a few weeks back. I think we're finally all set on this one. Thanks guys!
Comment 18•25 years ago
|
||
libneckoutil_s apparently needs to be removed from the commercial tree as well commercial tinderbox is still looking for it.
Comment 19•25 years ago
|
||
Could we please remove netwerk/util then, too? I used it for functions on my local tree and was completely irritated, that it suddenly failed.
Comment 20•25 years ago
|
||
Mass-moving non-PDT+ bugs to M13
Comment 21•25 years ago
|
||
Bulk move of all Necko (to be deleted component) bugs to new Networking component.
Assignee | ||
Comment 22•25 years ago
|
||
so is this fixed?
Reporter | ||
Comment 23•25 years ago
|
||
Its fixed for what was libneckoutil_s Problem still exists for libtimer_s
Reporter | ||
Comment 24•25 years ago
|
||
Hmm, wait a minute. There's now a libtimer_gtk.so that gets built. But nothing ever links against it. Is this a timer service? If so, people shouldn't be calling NS_NewTimer directly, right? What's the deal here?
Assignee | ||
Updated•25 years ago
|
Target Milestone: M13 → M14
Assignee | ||
Comment 25•25 years ago
|
||
i have no idea.
Reporter | ||
Comment 26•25 years ago
|
||
libtimer_gtk.so does get used. Its just that we use code from a static library (that's sucked in to many different places) in order to call it.
Comment 28•25 years ago
|
||
Not obvious to pdt what the actuall beta blocker is, can you please use "small words" for the PDT please. :-)
Comment 29•25 years ago
|
||
Platform: Beos and OpenVMS (i.e. not tier 1) Colin, is this still an issue for you though?
Reporter | ||
Comment 30•25 years ago
|
||
I think the way it works now is that the real timer code is in the sharable libtimer_gtk.so, but in all the places that its invoked from, the static code libtimer_s is used to invoke it. So its kind of fixed, but not totally. We still have a static library linked into multiple .so files. Only now its not the real code, its "helper" code. As to whether this is "an issue" for me? No. OpenVMS doesn't mind if you waste space by linking the same code into multiple sharable images. But is it "right"? That's a tough one. It still doesn't feel right to be linking the same code statically into multiple .so files.
Comment 31•25 years ago
|
||
Sounds like we should close this, unless Pav is a perfectionist.
Assignee | ||
Comment 33•25 years ago
|
||
closing
Comment 35•25 years ago
|
||
*** Bug 30351 has been marked as a duplicate of this bug. ***
Comment 36•25 years ago
|
||
This isn't fixed -- we're still statically linking MOZ_TIMER_LIB (libtimer_s) all over the place.
Status: VERIFIED → REOPENED
Resolution: FIXED → ---
Comment 38•25 years ago
|
||
Actually reassign it to me.
Assignee: pavlov → blizzard
Status: ASSIGNED → NEW
Comment 39•25 years ago
|
||
Ok, I have a plan to fix this. It looks like an XP problem that affects the mac and windows, too. Can anyone confirm or deny this?
Updated•24 years ago
|
Status: NEW → ASSIGNED
Comment 41•24 years ago
|
||
spam, changing qa contact from paulmac to tever@netscape.com on networking/RDF bugs
QA Contact: paulmac → tever
Comment 42•24 years ago
|
||
Please ignore the spam. Changing address.
Assignee: blizzard → blizzard
Status: ASSIGNED → NEW
Assignee | ||
Comment 44•24 years ago
|
||
taking from blizzard
Assignee: blizzard → pavlov
Status: ASSIGNED → NEW
Whiteboard: [PDT-]
Assignee | ||
Comment 45•24 years ago
|
||
libtimer_*_s.a is no more. next step is to remove NS_NewTimer completly. I have filed bug 39523 for tracking of removing NS_NewTimer
Status: NEW → RESOLVED
Closed: 25 years ago → 24 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•