Re: win2k, service, pg_ctl, popen, etc
Bruce Momjian <[email protected]>
| Newsgroups | gmane.comp.db.postgresql.devel.win32 |
|---|---|
| Message-ID | <[email protected]> |
Claudio Natoli wrote: > > > If we don't know why, sign one more down as a bug in mingw (hardly > > surprising - just the area of pipes and consoles seems to be > > where it's weak). In that case, why not just recode pg_ctl to execute > > postmaster.exe from the same directory it found pg_ctl.exe > > in. This can easily be done using GetModuleFileName(). Is a pipe opened at > > > any other place? Or does other places need to be fixed as well (I haven't > gone > > through the whole code). > > Moreover, all the find_*_exec calls could (and IMHO, should) make use of > GetModuleFileName. Win32 has an API to find the running file name; *nix does > not and so we have to jump through a few hoops. I just don't see the sense > in jumping through the same hoops under Win32. > > Sure, the functions also make certain that the version is as expected, but > to my mind this is just a safety check to make sure the hoops we just jumped > through were all in order. Of course, we'd also lose the ability to protect > people who mix versions in the same directory, but such people need a lot > more protection from themselves than we can provide. ;-) > > Does there continue to be any resistance to this approach? If not, I'll > gladly provide a patch. GetModuleFileName() doesn't solve our problem here. We already know what we think is the right path, but we have to be sure that we are calling a matching version binary. For example, initdb wants to call a postgres that is the right version, as does pg_ctl. We have had mismatches reported in the past, and with relocatable installs it is even more likely. The version check is centralized in one place, exec.c, and I don't want to have different behaviors on Win32 and Unix if we can help it. Let's go with the system() into a temp file. -- Bruce Momjian | http://candle.pha.pa.us [email protected] | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 ---------------------------(end of broadcast)--------------------------- TIP 7: don't forget to increase your free space map settings