Re: [HACKERS] Does this make sense:
От | Bruce Momjian |
---|---|
Тема | Re: [HACKERS] Does this make sense: |
Дата | |
Msg-id | 199812141643.LAA23706@candle.pha.pa.us обсуждение исходный текст |
Список | pgsql-hackers |
> > > > > > > > char * > > > crypt_getpwdfilename() > > > { > > > > > > static char *pfnam = NULL; > > > > > > if (!pfnam) > > > { > > > int bufsize; > > > bufsize = strlen(DataDir) + strlen(CRYPT_PWD_FILE) + 2; > > > pfnam = (char *) palloc(bufsize); > > > spprintf(pfnam, bufsize, "%s/%s", DataDir, CRYPT_PWD_FILE); > > > } > > > > > > return pfnam; > > > } > > > > > > Why the check for '!ipfnam'? Seems useless since we are setting it to > > > NULL the line before...no? > > > > Actually, no. We are declaring it as static, so the first time the > > function is called, it is set to NULL. After that, it is not > > initialized for each function call because a static local variable's > > value is kept between function calls. It is like a global variable in > > its duration, but in local scope. > > > > This is an old trick to run the initialization code only the first time > > the function is called. > > But is it good then to use palloc() instead of malloc()? > Anything palloc()'d is thrown away when the memory context in > which it is made get's destroyed. So you have to care about > the memory context in which the call is made. If under some > (but not all) circumstances the FIRST call is made in the > wrong mcxt, the pointer maybe get's corrupted later. Oops, yep, I didn't see that. palloc is bad to use in this context. Malloc should be used, Marc. -- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
В списке pgsql-hackers по дате отправления: