阅读:1323回复:5
mikeluo 有问题请教!
我修改passthru里的mpsend,自己分配了memory,buffer,重新组包后ndissend。现在的问题是传一个小文件就没问题,传了一个30多M的文件,快结束时就page fault.我觉的时释放memory,buffer,packet的问题。看到你以前回别人的一个贴子。
发表于: 2003/1/6 - 22:49 自己分配的memory,buffer是不是和packet 一样处理,还是ndissend完后直接释放掉就可以了。 |
|
沙发#
发布于:2003-02-21 09:08
packet和buffer memery是一样的,是你分配的你就释放,如果不是你分配的就让系统去释放。
你的这个状况应该是什么地方内存越界了吧,仔细检查函数的参数有没有问题,有没有该用指针的地方用了指针的指针一类的错误 |
|
|
板凳#
发布于:2003-02-21 10:10
你自己分配的buffer都是chain在packet上的,释放packet的时候才释放buffer,顺序是memery、buffer、packet
|
|
|
地板#
发布于:2003-02-21 11:21
NdisSend(&Status,
pAdapt->BindingHandle, MyPacket); if (Status != NDIS_STATUS_PENDING) { NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket); NdisFreeMemory(pVM,2000,0); NdisFreeBuffer(pSPacketBuf); NdisFreePacket(MyPacket); } 我就是在源程序的基础上加了两行,按上面的代码释放的。可是我用softice跟踪了,发现Status一直都是pending,这时候是不是要在sendcomplete里释放memory,buffer. 如果在sendcomplete里释放,怎么释放哪? |
|
地下室#
发布于:2003-02-21 11:29
用NdisQueryPacket 和NdisQueryBuffer来得到memery和buffer的指针,再释放,
不过应该先判断以下这个packet和buffer是你分配的,不是你分配的就不要释放,直接传给协议层去处理。 |
|
|
5楼#
发布于:2003-02-21 14:53
真是郁闷!还是不行呀!急。。
能否贴一段MpSend的代码,不胜感激! |
|