I think perhaps we're talking at cross purposes here, but this is a subject that has caused me a massive amount of grief so I'm a no compromise mood.
Here it is: I have no problem with releasing a slave block WHEN I AM DONE WITH IT! The Operating System is there to serve me. Not the other way around. I am perfectly happy to defer releasing blocks for just a few scheduler loop cycles to allow my driuver to finish what it's doing. My issue is the badly written QDOS operating system that forces a decision on the time of disposal and does not even handle an error return. Unforgiveable. That's sloppy, lazy programming. QDOS OR Minerva OR SMSQ!!! -----Original Message----- From: ql-users-boun...@lists.q-v-d.com [mailto:ql-users-boun...@lists.q-v-d.com] On Behalf Of Laurence Reeves Sent: 20 April 2011 16:54 To: ql-us...@q-v-d.com Subject: Re: [Ql-Users] Announcement about the future of Ser-USB Adrian Ives wrote: > - As a further bonus, if QDOS has decided that you WILL flush a large > number of slave blocks, the driver will exhaust all of the available > memory trying to double buffer the requests. > How can the driver "exhaust all of the available memory". when it is not permitted to allocate memory while flushing slave blocks? ... My other comment, "The driver doesn't even get told about that." was about the fact that the driver does not get called for slave blocks whose data is "accessible". They are silently returned to the pool. > * Workhorse for releasing slave blocks, most of this was in io_slave > > reglist reg d0-d1/d3/a0-a4 > sb_slave > movem.l reglist,-(sp) > move.w #sv_fsdef<<2&(-256)!$f0,d1 mask for drive id and part > offset > assert 0,bt_stat > and.b (a1),d1 pick out drive bits from status > asr.w #2,d1 shift id to make pointer to table > move.l sv_fsdef&63(a6,d1.w),a2 get physical definition block > move.l fs_drivr(a2),a4 driver linkage address > lea -sv_lio(a4),a3 base of driver definition block > move.l ch_slave(a4),a4 get entry point of slave > jsr (a4) > movem.l (sp)+,reglist > > sb_allop > moveq #bt.actn,d2 set up action (read or write) mask > and.b (a1),d2 is action pending > bne.s sb_slave yes - go ensure slaving > sf (a1) take this block > ea_top > add.l d3,a1 move pointer to next one > ea_bot > subq.l #bt_end,d0 > bge.s sb_allop any more blocks? > bra.s ok_rts -- Lau AS! d-(!) a++ c++++ p++ t+ f-- e++ h+ r--(+) n++(*) i++ P- m++ ASC Decoder at<http://www32.brinkster.com/ascdecode/> _______________________________________________ QL-Users Mailing List http://www.q-v-d.demon.co.uk/smsqe.htm _______________________________________________ QL-Users Mailing List http://www.q-v-d.demon.co.uk/smsqe.htm