Re: MsgBase first_msg property.
By: deon to Digital Man on Sun May 08 2022 10:41 pm
> Re: MsgBase first_msg property.
> By: Digital Man to deon on Sat May 07 2022 09:44 am
>
> > Currently, I'm not scrubbing any cached values (namely, the contents of
> > the SMB "status header", which includes such things as the last message
> > number). The first message number must be queried every time the property
> > is read, that value is not cached in any SMB data structure.
>
> > > I know I can create new variables with those values that I need, but
> > > that does seem a waste when I have a variable that has this object
> > > already (especially if it is updated when I reopen the message base).
>
> > You can look at js_msgbase.c if you're curious how/why it works the way
> > it does and offer suggestions, but right now, it's working as designed
> > and expected.
>
> OK, thanks for the guidance - I see what's going on now.
>
> Would you be adverse to something like this:
>
> diff --git a/src/sbbs3/js_msgbase.c b/src/sbbs3/js_msgbase.c
> index d52c7000f..8df7a7d9c 100644
> -+- a/src/sbbs3/js_msgbase.c
> +++ b/src/sbbs3/js_msgbase.c
> @@ -2967,6 +2967,7 @@ static JSBool js_msgbase_get(JSContext *cx, JSObject
> *obj, jsid id, jsval *vp)
> idxrec_t idx;
> private_t* p;
> jsrefcount rc;
> + static uint32_t first_msg = 0;
I would be adverse, yes, as static variables are shared among on threads (e.g. nodes) and if you opened 2 message bases, that variable would be stomped on by the second opened message base. That's not going to work.
> IE: I'm hoping the smb.status header retains it's values when the msgbase is
> closed (and you can trust those values as correct as at the time of
> closure).
The smb.status header is not cleared when the msgbase is closed. But that's sort of what I was proposing: it should be. Or at least js_msgbase_get() should return 'undefined' for those properties when the message base isn't open to let you know that you've done something unexpected.
> I'm assuming this wont affect anything else, given that you can
> see if the message base is open (and thus the values are current), if
> "is_open = true".
I've added a proper caching of the last-read 'first_msg' value (caching it in the object's private data). I'll commit that now. Give it a try and let me know if it does what you were hoping for.
--
digital man (rob)
This Is Spinal Tap quote #46:
"Not an Exit" - we don't want an exit. Well that's true.
Norco, CA WX: 64.1øF, 64.0% humidity, 11 mph S wind, 0.00 inches rain/24hrs
--- SBBSecho 3.15-Linux
* Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
|