Category Archives: Linux

当你 Debug 一门过气语言生成的代码里面产生的 memory leak 时会发生什么 (a.k.a. 不要修改 vala 返回的 strv 的 length)

(会被写成 blog 发出来。) 直接上一段代码。 var array = elements.to_array (); array.length = -1; return “(” + string.joinv (” “, array) + “)”; 提问,这段代码有什么问题? 它会生成这样的代码。 _tmp32_ = gee_collection_to_array ((GeeCollection*) _tmp30_, &_tmp31_); array = _tmp32_; array_length1 = _tmp31_; _array_size_ = array_length1; array_length1 = … Continue reading

Posted in Linux | Tagged , | 1 Comment

最近踩的一个关于 std::unique_ptr 的小坑。

简单来说就是这样一件事,std::unique_ptr 在析构途中调用了 .get() 会发生什么这样一个问题。 当然,你是不应该写出这样的代码的……但是有时候这样的行为可能并不是非常明显。所以就会导致问题… 一个 FreeBSD 上的人汇报了在 Linux 上没有的 crash。估计是 libc++ 和 libstdc++ 的行为差别。一个在析构途中就返回 null 了,一个还是返回原始的指针。 总之,小心避免写出这样的代码吧。

Posted in Linux | Tagged , | Leave a comment

最近的一个 Linux Intel 驱动问题和 Workaround

老实说一般我都不愿意写这种文章。因为这种文章基本上都是很有时效性的。但毕竟这个问题已经困扰了我好几个月,所以还是打算记录一下方便同样遇到问题的人。 具体表现是,开机正常,使用正常,但是如果放久了就会黑屏再也起不来。这时还能 ssh 进去,但是从 ssh 重启很大可能会等待很久。上游的 bug report 我也不好分辨到底是哪个,就随便列出几个我觉得相关的。 https://bugs.freedesktop.org/show_bug.cgi?id=102224 https://bugs.freedesktop.org/show_bug.cgi?id=102853 那么最后我的解决方案是什么呢……总之也是在某个 report 里面看到有人提到的方法。 在 /etc/modprobe.d/90-i915.conf 里面写上 options i915 enable_guc_loading=1 enable_guc_submission=1 disable_power_well=0 总之我加上这个参数之后好久都没有出过问题了。 顺带一提我正在使用的内核版本是 4.13.0 但是这个问题至少困扰我了好久好久大概从 4.9 之后升级了 BIOS 开始……

Posted in Linux | Tagged , , , | Leave a comment

一个关于 Pimpl 的小技巧

使用 Pimpl 很多时候是必须的,ABI 兼容的时候基本都要靠它。在 C++ 11 当中,通过 default member initializer 可以实现很多有趣的效果,加上宏的话很多时候可以利用来实现 Metadata 的效果,例如: #define PROPERTY(NAME) \ Property NAME{this, #NAME}; class Registry { friend class Property; public: int& getValueByName(const std::string &name) { return *values_[name]; } protected: void registerValue(const std::string name, int* … Continue reading

Posted in Linux | Tagged , , | Leave a comment

最近买的最满意的笔记本

其实就是这个 Thinkpad X1 yoga 了。在这之前,其实也经历了不少笔记本…… 最早最早的联想天逸……忘了型号。Gateway I43…Asus Zenbook UX31E,Dell XPS 13 老版本,Ideapad yoga 2 pro,Surface Pro 4……回想起来会觉得太败家了……幸好 Surface Pro 4 是卖了个  6 折回血。 总之之前的都各有各的问题。最早的当然都是沉啦。后来就有了超级本,就不想回到砖头了。 Asus 的问题是妈逼电源线插头太脆弱了,老断啊,断了买了新电源再断,感觉哪天就要被电死了。 Dell 没买一个月换了主板……虽然之后就一直用了,后来给老婆用去了用到现在,但是 wifi 似乎也是有毛病的,而且分辨率是比较惨的 1366×768,之前的 asus 是 1600×900 都能看出明显差距了。 所以后来为了分辨率和屏幕弄了 yoga 2 pro,基本是不错,不过蓝牙和 wifi … Continue reading

Posted in Linux | Tagged , , , | 6 Comments